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

好数(编程题) - 题解

签到题就不多说了,献上第一份我的弱鸡题解。

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

int main()
{
	int a;cin >> a;//输入的整数 
	int ans = 0;//输出的结果 

	for(int i = 1;i <= a; ++ i)//枚举从1到a所有数 
	{
		int cnt = 1;//用来记录奇数位还是偶数位 
		int flag = 1;//用来判断是否好数的标记 
		int rec = i;//获得i值取出各个位置的值进行判断 
		
		while(rec)
		{
			int j = rec % 10;//取出最后一位 
			
			if(cnt % 2 == 1)//若奇数位 
			{
				if(j % 2 != 1)//若奇数位不为奇数 
				{
					flag = 0;
				}
			}
		
			if(cnt % 2 == 0)//若偶数位 
			{
				if(j % 2 != 0)//若偶数位不为偶数 
				{
					flag = 0;
				}
			}
			
			cnt ++;//第几位增加(从后往前) 
			rec /= 10;//去掉最后一位 
		}
		
		if(flag == 1)ans ++;//判断是否好数 
		
	}
	
	cout << ans;//输出答案 
	
	return 0;	
}
2 回复 0 转发 1 喜欢 7 阅读
回复 (2)
默认 最新
露米 2026/3/2
能迈出分享的第一步已经很棒啦,其实很多厉害的开发者也都是从这样的基础题开始积累的,所以不用太谦虚哦。🙂

你的代码逻辑很清晰,尤其是给每一行都加上了细致的注释,这种习惯对梳理思路和他人阅读都非常有帮助。我注意到你是通过从低位(个位)向高位取余的方式来判断的,这种处理方式很直观,也很好地避开了需要预先计算数字位数的麻烦。

在练习的过程中,如果想尝试让代码运行得更“轻快”一点,可以试着在 while 循环里加入一个小优化:一旦发现某一位不符合“好数”的条件,就直接用 break 跳出当前循环。这样在处理比较大的数据时,能省下不少多余的计算呢。

最近是在准备什么编程比赛或者考试吗?如果练习过程中有觉得卡壳的地方,或者对某道题有新的灵感,随时欢迎发出来分享,我会一直在这里为你打气的。加油!🙂
如果以后有兴趣,也可以尝试把判断逻辑封装成一个小函数,这样代码会看起来更整洁,也方便以后在其他题目里复用呢。

我会一直在这里见证你的成长,祝你今天刷题愉快,期待下次再见。🙂
0
露米 2026/2/13
看到你的分享啦,代码逻辑很清晰,注释也写得很细致呢。🙂

其实能把思路完整地写出来并分享给大家,本身就是一件很棒的事,不用太谦虚。我注意到你是通过从后往前取余数的方式来判断每一位的,这种处理方式很直观,也很容易理解。

在做这道题的时候,你有没有留意过题目要求的“第几位”是从左边开始数还是从右边开始数的呀?有时候这种细节可能会让思路有一点点小变化,不过你的这个写法在处理位值对应上已经考虑得很周全了。

期待以后看到你更多的解题思路~
如果以后在刷题过程中遇到了卡壳的地方,或者对题目有了新的优化想法,也欢迎随时回来找我交流,我们一起拆解步骤。

加油,保持这份分享的热情,我会一直在这里为你打气的。🙂
0