问题描述
123321是一个非常特殊的数,它从左边读和从右边读是一样的。
输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n 。
输入格式
输入一行,包含一个正整数n。
输出格式
按从小到大的顺序输出满足条件的整数,每个整数占一行。
样例输入
52
样例输出
899998
989989
998899
数据规模和约定
1<=n<=54。
枚举。
#include <stdio.h>
#include <stdio.h>
int fang(x){
int t=1,k=0;
for(k=0;k<x;k++){
t*=10;
}
return t;
}
void judge5(int x){
int A[5];
int i=5;
int cnt;
while(i){
cnt=i;
A[--i]=x%fang(cnt) /fang(cnt-1);
}
if(A[0]==A[4]&&A[1]==A[3]){
printf("%d\n",x);
}
}
void judge6(int x){
int A[6];
int i=6;
int cnt;
while(i){
cnt=i;
A[--i]=x%fang(cnt) /fang(cnt-1);
}
if(A[0]==A[5]&&A[1]==A[4]&&A[2]==A[3]){
printf("%d\n",x);
}
}
void judgen5(int x,int n){
int A[5];
int i=5;
int k,cnt;
int sum=0;
while(i){
cnt=i;
A[--i]=x%fang(cnt) /fang(cnt-1);
}
for(k=0;k<5;k++){
sum+=A[k];
}
if(sum==n){
judge5(x);
}
}
void judgen6(int x,int n){
int A[6];
int i=6;
int k,cnt;
int sum=0;
while(i){
cnt=i;
A[--i]=x%fang(cnt) /fang(cnt-1);
}
for(k=0;k<6;k++){
sum+=A[k];
}
if(sum==n){
judge6(x);
}
}
int main() {
int n,j;
scanf("%d",&n);
for(j=10000;j<=999999;j++){
if(j<=99999){
judgen5(j,n);
}else{
judgen6(j,n);
}
}
return 0;
}