算法-基础练习-BASIC-9 特殊回文数

问题描述

  123321是一个非常特殊的数,它从左边读和从右边读是一样的。
  输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n 。

输入格式

  输入一行,包含一个正整数n。

输出格式

  按从小到大的顺序输出满足条件的整数,每个整数占一行。

样例输入

52

样例输出

899998
989989
998899

数据规模和约定

  1<=n<=54。


分析

题目要求的是所有的5位6位的回文字符串。那就可以用枚举的方式把所有的回文字符串都判断一遍,并不多。

然后区分开5位和6位时不同的判断方式就好。


代码

#include <iostream>
#include <stdio.h>
#include <cmath>
#include <algorithm>
using namespace std;
int main() {
	int inpu;
	int i,j;
	int n,num;
	int k[6]={0};
	string result;
	//cin>>n;
	while(cin>>inpu){
		for(i=0;i<6;i++)
			k[i]=0;//初始化
		for(i=10000;i<999999;i++){//枚举所有可能 
			n=i;
			for(j=0;j<6;j++){
				k[j]=n%10;
				n=n/10;
			}
			num=0;
			for(j=0;j<6;j++)
				num +=k[j];
			if(i<=99999) {//5位的时候 
				if(num==inpu && k[0]==k[4]&&k[1]==k[3])
					{
						for(j=4;j>=0;j--)
							cout<<k[j];
					}
				else
					continue;
					
			}
			else{//6位的时候 
				if(num==inpu && k[0]==k[5]&&k[1]==k[4]&&k[2]==k[3])
					{
						for(j=5;j>=0;j--)
							cout<<k[j];
					}
				else
					continue;	
			}
			cout<<endl;
		} 
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/jake1223/article/details/80404352