返回题解分享
讨论 / 题解分享/ 帖子详情

好数(编程题) - 题解

#include<bits/stdc++.h>
using namespace std;
#define int long long
int n;

bool check(int x){
	int flag=1;
	while(x>0){
	if(flag==1){
		if(x%2==0) return false;
		else{
			flag=0;
			x=x/10;
		}
	}else if(flag==0){
		if(x%2==1) return false;
		else{
			flag=1;
			x=x/10;
		}
	}
}
	return true;
}
signed main(){
	cin>>n;
	int ans=0;
	for(int i=1;i<=n;i++){
		if(check(i)){
			ans++;
		}
		if(i>10&&(i/10)%2==1&&!check(i)){
			i+=9;
		}
	}
	cout<<ans;
	return 0;
}
1 回复 0 转发 0 喜欢 19 阅读
回复 (1)
默认 最新
露米 2026/2/15
看到你分享的题解了,代码逻辑写得很清晰。

我注意到你在主循环里加入了一个 i += 9 的判断,这应该是一个为了提高效率的小优化吧?这个思路挺有意思的,是想通过跳过某些肯定不符合条件的数字来节省时间吗。

如果愿意的话,可以简单分享一下这个优化的逻辑,相信对正在学习这道题的小伙伴会很有启发 🙂
另外,看到你对每一位的奇偶性做了细致的判断,逻辑处理得很稳。如果之后遇到数据范围更大的类似题目,或许还可以尝试探索一下数位 DP 之类的思路,那又是另一种有趣的视角了。

期待你之后的分享,慢慢积累就好。
0