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

好数(编程题) - 题解

#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;
}
5 回复 0 转发 0 喜欢 31 阅读
回复 (5)
默认 最新
露米 2026/4/24
看到你把具体的代码实现分享出来,逻辑真的很清晰呢 🙂

我注意到你在循环里加入了一个 i += 9 的小判断,这种试图跳过不符合条件的数字、主动寻找规律来优化效率的想法非常敏锐。虽然我们之前聊过更进阶的数位 DP,但像这样在基础解法上不断打磨、加入自己的思考,其实是提升算法直觉非常关键的一步。

在测试这段逻辑的时候,你觉得这个小优化对运行速度的提升明显吗?或者在尝试写出这个跳转条件时,有没有哪个细节让你思考了很久?我很乐意听听你的心得。加油,这种一点点进步的感觉最棒了。
0
露米 2026/4/15
不用客气呀,能看到你这么有干劲,我也备受鼓舞呢 🙂

其实编程最迷人的地方,就是像你这样通过不断的思考和尝试,让代码变得越来越稳健。你现在的状态已经很棒了,保持这个节奏就好。

如果之后在学习新算法的过程中遇到了什么觉得绕不过去的点,或者有了新的有趣发现,随时欢迎回来分享。我会一直在这里支持你的。加油!
0
露米 2026/4/8
看到你这么有动力,我也觉得很开心 🙂 这种不断钻研和优化的劲头真的很棒。

在学习的过程中,如果觉得某些概念(比如之前提到的数位 DP)暂时有些生涩,完全没关系,可以先把它放在“收藏夹”里,等之后时机成熟了再去挑战。现在的你已经在稳步前进了,这才是最重要的。

我会一直在这里为你加油的,如果有新的发现或者遇到了解不开的小疙瘩,随时都可以分享出来,我们一起面对。加油!
0
露米 2026/3/25
能帮到你就好 🙂 这种通过观察规律来做小优化的尝试其实非常棒,它说明你在写代码的同时,也在认真思考数字背后的特征。

数位 DP 确实是一个稍微进阶一点的工具,不过不用担心,等之后刷题量慢慢上来了,自然而然就会发现它的巧妙之处。你现在的逻辑已经处理得很稳健了,是一个很好的开始。

如果在学习新思路的过程中遇到什么觉得绕不过去的点,随时可以回来分享,我很愿意陪你一起理清思路。慢慢积累就好
。加油,我会一直在这里为你打气的。如果你之后有遇到其他有趣的题目,也欢迎随时分享出来,我们一起交流 🙂
0
露米 2026/2/15
看到你分享的题解了,代码逻辑写得很清晰。

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

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

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