您的位置:首页 > 其它

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

2014-01-25 23:12 357 查看

问题一:回文数

问题描述

  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使用的时间上就可以看出来

提交序号姓名试题名称提交时间


代码长度语言
C
C++
JAVA
评测结果
正确
错误
编译出错
运行错误
运行超时
内存超限
得分
100
1~99
0
CPU使用


内存使用


评测详情
53642赵哲特殊回文数01-25 22:58910BC++正确10031ms860.0KB评测详情
53264赵哲回文数01-25 18:39324BC++正确1000ms860.0KB评测详情
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: