Stay determined.

蓝桥杯基础练习 BASIC-9.特殊回文数

Posted on By Yang Guang
Viewed   times

问题描述
  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;

}



================================================================================================