蓝桥杯 【基础练习】 特殊回文数
问题一:回文数
问题描述
1221是一个非常特殊的数,它从左边读和从右边读是一样的,编程求所有这样的四位十进制数。
输出格式
按从小到大的顺序输出满足条件的四位十进制数。
思路:分别求出这个四位数的每一个位上的数,然后做比较
#include<iostream> using namespace std; int main() { for(int n=1000;n<10000;n++) { int a = n/1000; //a是千位 int b = (n - a*1000)/100; //b是百位 int c = (n - a*1000 - b*100)/10;//c是十位 int d = (n - a*1000 - b*100)%10;//d是个位 if(a == d&&b == c) { cout<<n<<endl; } } return 0; }
问题二:特殊回文数
问题描述
123321是一个非常特殊的数,它从左边读和从右边读是一样的。
输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n 。
输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n 。
输入格式
输入一行,包含一个正整数n。
输出格式
按从小到大的顺序输出满足条件的整数,每个整数占一行。
样例输入
52
样例输出
899998
989989
998899
989989
998899
数据规模和约定
1<=n<=54。
思路:特殊回文数不但要求该数字为回文数,还要求该数字每一位数字的和相加等于一个数,而且该题目包含了四位和五位数
#include<iostream> using namespace std; int main() { int m; cin>>m; for(long n=10000;n<100000;n++) { int a = n/10000; //第一个 int b = (n - a*10000)/1000; //第二个 int c = (n - a*10000 - b*1000)/100; //第三个 int d = (n - a*10000 - b*1000 - c*100)/10; //第四个 int e = (n - a*10000 - b*1000 - c*100)%10; //第五个 if(a == e && b == d) //是否为回文数 { if(a+b+c+d+e == m) //是否为五位特殊回文数 { cout<<n<<endl; } } } for(long n=100000;n<1000000;n++) { int a = n/100000; //第一个 int b = (n - a*100000)/10000; //第二个 int c = (n - a*100000 - b*10000)/1000; //第三个 int d = (n - a*100000 - b*10000 - c*1000)/100; //第四个 int e = (n - a*100000 - b*10000 - c*1000 - d*100)/10; //第五个 int f = (n - a*100000 - b*10000 - c*1000 - d*100)%10; //第六个 if(a ==f && b ==e && c == d) //是否为回文数 { if((a+b+c+d+e+f) == m) //是否为六位特殊回文数 { cout<<n<<endl; } } } return 0; }
比较:问题二的数字和计算量都大于第一个,通过cpu使用的时间上就可以看出来
提交序号 | 姓名 | 试题名称 | 提交时间 | 代码长度 | CPU使用 | 内存使用 | 评测详情 | |||
---|---|---|---|---|---|---|---|---|---|---|
53642 | 赵哲 | 特殊回文数 | 01-25 22:58 | 910B | C++ | 正确 | 100 | 31ms | 860.0KB | 评测详情 |
53264 | 赵哲 | 回文数 | 01-25 18:39 | 324B | C++ | 正确 | 100 | 0ms | 860.0KB | 评测详情 |