原题链接:蓝桥杯历届试题-回文数字
首先是借鉴了前辈的网址奉上:蓝桥杯历届试题-回文数字 (C语言代码)最简洁的解法(对应解法一)
[历届试题]回文数字 (时间复杂度比优质题解的要低)(对应解法二)
解题思路:
都是用遍历,回文数字的判定和回文数字数位和与输入数字是否相等的判定。
解法一是将五位数和六位数全遍历一遍;而解法二只遍历五位数或六位数的第一位和第二位,第三位由输入数字n和第一二位的数字决定,降低了时间复杂度。
注意事项:
没有满足条件的,输出:-1 。其他详见代码注释。
参考代码:
解法一:
#includeint main(){ int n,i,flag=1; scanf("%d",&n); for(i=10000;i0) { num=num*10+t%10; sum+=t%10; t/=10; }//循环结束后num就等于i的倒序数字,如果num和i相等则i是回文数字 if(num==i&&sum==n)//sum进行数位和的计算 { flag=0; printf("%d\n",i); } } if(flag) printf("-1"); return 0; }//五位数和六位数的全部遍历,对计算机来说也用不了太多时间
解法二:
#includeint main() { int n,flag=1; scanf("%d",&n); int i,j,k; for(i=1;i<=9;i++) for(j=0;j=0)&&(k<10)) { flag=0; printf("%d%d%d%d%d\n",i,j,k,j,i); } } for(i=1;i<=9;i++) for(j=0;j=0)&&(k/2<10))//六位数的时候这里的k实际上最中间的两个数的和,一个数的二倍一定是偶数,所以k一定是偶数。 { flag=0; printf("%d%d%d%d%d%d\n",i,j,k/2,k/2,j,i); } } if(flag) printf("-1"); return 0; }//两重循环第一二位,第三位利用n和一二位求得,先进行五位数的判断,再进行六位数的判断
为什么提交的时候标题太短会刷新啊,害得我重新打了一遍!呜呜呜!!!
0.0分
5 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复