一、[题目] 特殊的数字2 (回文数)
时间限制:1.0s 内存限制:512.0MB
问题描述
123321是一个非常特殊的数,它从左边读和从右边读是一样的。
输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n 。
输入格式
输入一行,包含一个正整数n (1<=n<=54)。
输出格式
按从小到大的顺序输出满足条件的整数,每个整数占一行。
样例输入
52
样例输出
899998
989989
998899
二、[代码]:
PS. 特殊的数字2 (回文数) 是一道与数学规律相结合的初级趣味题目,其需要解题者能正确理解特殊数的特征并将其利用一定算法输出,只要理解题目解出这道题其实并不困难。
算法一:利用特殊数的特征结合算法解题
代码1:
#include <stdio.h>
#include <stdlib.h>
#define A(X) ((t[X]-'0'))
int main()
{
char t[3];
int N;
scanf("%d",&N);
for(int i=100;i<1000;i++){
itoa(i,t,10);
if((A(0)+A(1))*2+A(2)==N)
printf("%c%c%c%c%c\n",t[0],t[1],t[2],t[1],t[0]);
}
for(int i=100;i<1000;i++){
itoa(i,t,10);
if((A(0)+A(1)+A(2))*2==N)
printf("%c%c%c%c%c%c\n",t[0],t[1],t[2],t[2],t[1],t[0]);
}
return 0;
}
代码2:
#include <stdio.h>
#include <stdlib.h>
#define A(X) ((t[X]-'0'))
int main()
{
char t[7];
int N;
scanf("%d",&N);
for(int i=10000;i<1000000;i++){
itoa(i,t,10);
if(N==(i<100000?((A(0)+A(1))*2+A(2)):(A(0)+A(1)+A(2))*2)
&&(i<100000?(t[0]==t[4]&&t[1]==t[3]):(t[0]==t[5]&&t[1]==t[4]&&t[2]==t[3])))
printf("%s\n",t);
}
return 0;
}
欢迎评论和转载,转载请注明文章出处,我对此表示最真诚的敬意!