原题链接:蓝桥杯历届试题-回文数字
解题思路:1.分别求满足条件的五位数和六位数,利用三层循环实现。
2.最外层从1开始,因为数字第一位不能为0,i,j,p从小到大循环保证最后输出顺序是从小到大的,不需要再次排序。
for(int i=1;i<10;i++){ for(int j=0;j<10;j++){ for(int p=0;p<10;p++){ ... } } }
3.函数接收temp值,来区分输出五位数还是六位数,再函数调用时,先输出五位数,再输出六位数,保证顺序从小到大.
shu(5); shu(6);
4.用sum表示所有位数加起来的值,五位数为
sum=i*2+j*2+p;
六位数为
sum=i*2+j*2+p*2;
5.对得到的sum进行判断,是否等于n即输入,若等于进行输出,以五位数为例子,如下,res为输出数字
if(temp==5){ sum=i*2+j*2+p; if(sum==n){ res=i*10000+j*1000+p*100+j*10+i; // 记录符合条件数目,count为0时,输出-1 count++; cout<<res<<endl; } }
6.注意题目要求,共两种情况,有则输出对应数,无则输出-1,利用count初值为0来判断是否有满足的数,没有则count为0
if(count==0){ cout<<-1<<endl; }
参考代码:
#include<iostream> using namespace std; int n; int sum=0; int res=0; int count=0; void shu(int temp){ // 从外向里遍历使得到的数从小到大,第一位不为0,外层循环从1开始 for(int i=1;i<10;i++){ for(int j=0;j<10;j++){ for(int p=0;p<10;p++){ if(temp==5){ sum=i*2+j*2+p; if(sum==n){ res=i*10000+j*1000+p*100+j*10+i; // 记录符合条件数目,cout为0时,输出-1 count++; cout<<res<<endl; } } if(temp==6){ sum=i*2+j*2+p*2; if(sum==n){ res=i*100000+j*10000+p*1000+p*100+j*10+i; count++; cout<<res<<endl; } } } } } } int main() { cin>>n; shu(5); shu(6); if(count==0){ cout<<-1<<endl; } return 0; }
0.0分
2 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复