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

问题一:回文数

问题描述
  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:58 910B C++ 正确 100 31ms 860.0KB 评测详情
53264 赵哲 回文数 01-25 18:39 324B C++ 正确 100 0ms 860.0KB 评测详情


posted @ 2014-01-25 23:12  千手宇智波  阅读(1189)  评论(0编辑  收藏  举报