解题思路:刚来这个网站不久,看了前辈们写的题解,感觉有点沉长,题目种说5位数和6位数的,并且从小到大;我直接按顺序遍历10000到1000000(不包括)之间的数,把么一个数就求其回文和给位数字之和来判断时候复合要求;判断回文:数组也可以做到,但是在本题种使用本人的做法可以简单的将判断回文和求个位数字之和一起方便求得;比如给出1221:1221%10=1 ->1221/10=122 -> 1*10+122%10=12 ->122/10=12 

->12*10+12%10=122 -> 12/10=1 -> 122*10+1%10=1221  得到1221与原来给出得相等;

在举个反例:123:123%10=3 -> 123/10=12 -> 3*10+12%10=32 -> 12/10=1 ->32*10+1%10=321;

                            123 != 321  故不是回文数;

求个位数字之和只用在求回文得时候 每次取余得到得数累加求和即可。

(刚开始使用这个,格式什么的还不会设置,望理解,谢谢)

注意事项:在判断回文的时候,记得用一个临时变量代替正在遍历的数,不然会影响遍历顺序,导致程序出错。

参考代码:

#include <stdio.h>
int main(void)
{
	int n, flag = 1;
	scanf("%d", &n);
	for(int i = 10000; i < 1000000; ++i)
	{
		int t = i, num = 0, sum = 0;
		while(t>0)
		{
			num = num*10 + t%10;
			sum += t%10;
			t /= 10;
		}
		if(num==i && sum==n)
		{
			flag = 0;
			printf("%d\n", i);
		}
	}
	if(flag)
	{
		printf("-1\n");
	}
	
	return 0;
}


点赞(42)
 

0.0分

86 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 42 条评论

xiaocaiji 4年前 回复TA
@Sleep 俺也是这法做类 哈哈哈
张程序员 4年前 回复TA
@marker 输出的结果只有-1
克里斯帮我把AW的门 4年前 回复TA
@啊槿 因为while循环里面有个t/=10,所以进行到一定程度t一定会等于0
咖啡 4年前 回复TA
@啊槿 t等于0时就可以鸭
啊槿 4年前 回复TA
能不能解释t>0这个怎么退出来? 谢谢
Sleep 4年前 回复TA
#include <bits/stdc++.h>
using namespace std;

int main(){
	int x1,x2,x3,x4,x5,x6;
	int n;
	bool a=false;
	
	scanf("%d",&n);
	
	for(int i=100;i<=999;i++){

		x3=i%10;
		x2=i/10%10;
		x1=i/100%10;
		x4=x2;
		x5=x1;
		if((x1+x2+x3+x4+x5)==n)cout<<i<<x4<<x5<<endl,a=true;
	}
	
	for(int i=100;i<=999;i++){

		x3=i%10;
		x2=i/10%10;
		x1=i/100%10;
		x4=x3;
		x5=x2;
		x6=x1;
		if((x1+x2+x3+x4+x5+x6)==n)cout<<i<<x4<<x5<<x6<<endl,a=true;
	}
	
	if(a==false)cout<<"-1";
	
	return 0;
}
GaoJune 5年前 回复TA
@liaowen 不会
liaowen 5年前 回复TA
请问int的范围不会超过吗
望尽天涯路 5年前 回复TA
@夏风 flag是一个标志位,有符合要求的就标志为1,没有就是0,0则对应输出-1;
望尽天涯路 5年前 回复TA
@下一站幸福 @bob2048 你这是优化而已,嗯。。。直接在循环的过程中考虑回文条件加以限制,减少循环的次数,不错的想法,但是本质上两者差不多!!