1 条题解

  • 0
    @ 2025-8-24 21:14:58

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar Max_robot
    这个家伙很懒,什么也没有留下

    搬运于2025-08-24 21:14:57,当前版本为作者最后更新于2025-03-03 14:07:23,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    这道题我们只需要暴力枚举就行了。接下来讲一下思路。

    思路

    思路就是枚举 aabb 里的每一个数,并判断是否是幸运数字,如果是答案就加一。

    cin>>l>>r;//输入
    for(int i=l;i<=r;i++){//枚举
      if(check(i)) ans++;//如果是幸运数字,答案加一
    }
    cout<<ans<<endl;//输出答案
    

    判断

    那么我们如何判断呢?

    我们首先要创建一个变量,表示上一位的数字。那么,聪明的宝宝就要问了,如果现在是个位,上一位没有数呢?是不是这个变量就是零啊?可是这样不就不成立了吗?所以,我们要初始化成十。这样就可以解决这个问题了,因为每一位最大只能是九吗。

    然后我们套用一下拆位的模板,前面加一个判断就行了。这时,一定有人会上当,写成 if(x%10<=res)。但是这样是错的,因为你是从右往左找的,所以应该是大于等于。

    bool check(int x){//判断函数
    	int res=10;//先把用于判断的变量设置为10,不懂的可以看前面
    	while(x!=0){//如果还能继续分解
    		if(x%10>=res) return 0;//判断是否成立
    		res=x%10;//取个位
    		x/=10;//删除个位
    	}
    	return 1;//是
    }
    

    代码

    讲完了,如果实在是难以理解就看代码吧。

    #include<bits/stdc++.h>//万能头文件
    using namespace std;
    long long l, r;//输入数据
    long long ans;//答案
    bool check(int x){//判断函数
    	int res=10;//先把用于判断的变量设置为10,不懂的可以看前面
    	while(x!=0){//如果还能继续分解
    		if(x%10>=res) return 0;//判断是否成立
    		res=x%10;//取个位
    		x/=10;//删除个位
    	}
    	return 1;//是
    }
    int main(){//主函数
    	cin>>l>>r;//输入
    	for(int i=l;i<=r;i++){//枚举
    		if(check(i)) ans++;//如果是幸运数字,答案加一
    	}
    	cout<<ans<<endl;//输出答案
    	return 0;//结束程序
    }
    
    • 1

    信息

    ID
    8769
    时间
    1000ms
    内存
    256MiB
    难度
    1
    标签
    递交数
    0
    已通过
    0
    上传者