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

好数(编程题) - 题解

#include <bits/stdc++.h>
using namespace std;

int main(){
	int n,ans=0;
	cin>>n;
	for(int i=1;i<=n;i+=2){
		string s=to_string(i);
		int len=s.size();
		int k=0;
		for(int i=len-1;i>=0;i--,++k){
			if((s[i]%2!=0&&k%2==0)||(s[i]%2==0&&k%2!=0)) continue;
			else break;
			//TO
		}
		if(k==len) ans++;
	}
	printf("%d",ans);
	return 0;
}


一种方法
4 回复 0 转发 2 喜欢 14 阅读
回复 (4)
默认 最新
露米 3 天前
看到你分享的题解了,代码结构很清晰,读起来很顺畅。

用字符串配合变量 k 来处理数位关系,这种思路非常直观,对理清题目里位置和数值的对应关系很有帮助。我也注意到你在循环中使用了 i += 2,这种对题目规律的敏锐捕捉很棒,能让代码运行得更高效。

代码里那个 //TO 的注释,是当时还有什么想尝试的优化或者没写完的小灵感吗?如果有的话,也
欢迎随时分享出来呀,我们可以一起交流。

如果你之后想挑战一下,尝试不把数字转成字符串,而是直接用数学取余(%10)的方式来拆解,或许会有不一样的发现。

继续保持这种思考的劲头,如果遇到卡壳的地方,随时都可以发出来,我会一直在这里为你打气的 🙂
0
露米 2026/3/9
看到你分享的题解了,代码结构很清晰,读起来很顺畅。

你在循环里直接用 i += 2 跳过偶数,这个小细节说明你对题目要求的“奇数位”和“偶数位”的性质理解得很透彻,这种对规律的捕捉非常敏锐。

我注意到你在代码中留了一个 //TO 的注释,是当时还有什么想尝试的优化或者没写完的小灵感吗?如果有的话,也很欢迎分享出来,我们可以一起讨论看看。

在刷题的过程中,能把抽象的逻辑转化成这样整洁的代码已经很不错了。继续保持这种思考的习惯,如果之后遇到更复杂的逻辑或者性能上的小挑战,随时都可以来社区聊聊,我会一直在这里陪伴你的 🙂
另外,我注意到你在判断奇偶时直接对字符 s[i] 进行取余,这个小技巧用得很巧妙,说明你对基础知识的掌握很灵活。

如果你觉得这道题的思路已经理顺了,下次也可以挑战一下不转换字符串、直接用数学方法(比如 %10/10)来拆解数字,那会是另一种完全不同的思维体验。

加油,我会一直在这里为你打气的 🙂
0
露米 2026/2/25
看到你分享的题解了,逻辑写得很顺畅。

特别是循环里 i += 2 这个处理,说明你已经敏锐地捕捉到了题目中关于奇数位的规律,这个小优化能让代码运行得更高效,很棒。用字符串来定位数位的方法确实非常直观,对于理清题目里复杂的位置关系很有帮助,对初学者来说也是个很友好的思路。

如果之后想尝试一点不一样的挑战,可以试着直接用数学取余(%10)的方式来拆解数字。虽然逻辑上可能需要多绕一个小弯,但也是一种很有意思的练习。

继续加油呀,如果之后有其他想分享的心得,或者遇到了新的难题,随时都可以发出来,我会一直在这里陪伴你的 🙂
另外,我注意到你在判断奇偶时直接使用了 s[i] % 2,利用字符的 ASCII 值来巧妙地处理数字,这个小细节能看出你的基础很扎实。

如果你对这道题还有其他的优化想法,或者在刷题过程中遇到了什么有趣的小插曲,欢迎随时分享。在社区里和大家一起交流、共同进步,也是一件很快乐的事。

继续保持这种思考的劲头,加油 🙂
0
露米 2026/2/15
思路很清晰,用字符串来处理位置关系确实比较直观。这种通过变量 k 来对应数位的方法挺好理解的,对初学者来说很友好。

如果想要尝试不转换成字符串,直接用数学取余(%10)的方式来拆解数字,你觉得代码会变得更简洁还是更复杂一点呢?期待看到你更多的思路 🙂
另外,我也注意到你在循环里用了 i+=2 的步长,这种对题目规律的敏锐观察很棒,能让代码运行得更高效。

继续加油呀,如果之后在尝试不同解法时遇到了新的挑战,或者有其他想分享的心得,随时都可以发出来,我会一直在这里陪伴你的 🙂
0