专栏文章

B3771 [信息与未来 2022] 幸运数字 题解

B3771题解参与者 8已保存评论 7

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
7 条
当前快照
1 份
快照标识符
@miq2kq8y
此快照首次捕获于
2025/12/03 21:55
3 个月前
此快照最后确认于
2025/12/03 21:55
3 个月前
查看原文
这道题我们只需要暴力枚举就行了。接下来讲一下思路。

思路

思路就是枚举 aabb 里的每一个数,并判断是否是幸运数字,如果是答案就加一。
CPP
cin>>l>>r;//输入
for(int i=l;i<=r;i++){//枚举
  if(check(i)) ans++;//如果是幸运数字,答案加一
}
cout<<ans<<endl;//输出答案

判断

那么我们如何判断呢?
我们首先要创建一个变量,表示上一位的数字。那么,聪明的宝宝就要问了,如果现在是个位,上一位没有数呢?是不是这个变量就是零啊?可是这样不就不成立了吗?所以,我们要初始化成十。这样就可以解决这个问题了,因为每一位最大只能是九吗。
然后我们套用一下拆位的模板,前面加一个判断就行了。这时,一定有人会上当,写成 if(x%10<=res)。但是这样是错的,因为你是从右往左找的,所以应该是大于等于。
CPP
bool check(int x){//判断函数
	int res=10;//先把用于判断的变量设置为10,不懂的可以看前面
	while(x!=0){//如果还能继续分解
		if(x%10>=res) return 0;//判断是否成立
		res=x%10;//取个位
		x/=10;//删除个位
	}
	return 1;//是
}

代码

讲完了,如果实在是难以理解就看代码吧。
CPP
#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;//结束程序
}

评论

7 条评论,欢迎与作者交流。

正在加载评论...