蓝桥杯 【基础练习】 特殊回文数

来源:互联网 发布:qt creator linux 编辑:程序博客网 时间:2024/05/16 15:25

问题一:回文数

问题描述
  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。
输出格式
  按从小到大的顺序输出满足条件的整数,每个整数占一行。
样例输入
52
样例输出
899998
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:58910BC++正确10031ms860.0KB评测详情53264赵哲回文数01-25 18:39324BC++正确1000ms860.0KB评测详情


1 0
原创粉丝点击