特殊回文数(C语言)

123321 是一个非常特殊的数,它从左边读和从右边读是一样的。
输入一个正整数 n, 编程求所有这样的五位和六位十进制数,满足各位数字之
和等于 n 。
输入格式
输入一行,包含一个正整数 n。
输出格式
按从小到大的顺序输出满足条件的整数,每个整数占一行。
样例输入
52
样例输出
899998
989989
998899
数据规模和约定
1<=n<=54。

#include <stdio.h>
int main()
{
int i, n;
scanf("%d", &n);
for (i = 10000; i < 100000; i++)  //五位进制数
{
int a = i / 10000;
int b = (i % 10000) / 1000;
int c = (i % 1000) / 100;
int d = (i % 100) / 10;
int e = i % 10;
if (a == e && b == d && a+b+c+d+e == n)
printf("%d\n", i);
}
for (i = 100000; i < 1000000; i++)    //六位进制数
{ 
int a = i / 100000;
int b = (i % 100000) / 10000;
int c = (i % 10000) / 1000;
int d = (i % 1000) / 100;
int e = (i % 100) / 10;
int f = i % 10;
if (a == f && b == e && c == d && a+b+c+d+e+f == n)
printf("%d\n", i);
}
return 0;
}

也可以用枚举的方法实现

#include<stdio.h>
int main( )
{
int n;
int a[6];
printf("Enter n:");
scanf("%d",&n);
if(n>=1&&n<=54)
{
for(a[0]=0;a[0]<=9;a[0]++)        //五位进制数
{
for(a[1]=0;a[1]<=9;a[1]++)
{
for(a[2]=0;a[2]<=9;a[2]++)
{
for(a[3]=0;a[3]<=9;a[3]++)
{
for(a[4]=0;a[4]<=9;a[4]++)
{
if(a[0]==a[4]&&a[1]==a[3]&&a[0]+a[1]+a[2]+a[3]+a[4]==n)
printf("%d%d%d%d%d\n",a[0],a[1],a[2],a[3],a[4]);
}
}
}
}
}
for(a[0]=0;a[0]<=9;a[0]++)         //六位进制数
{
for(a[1]=0;a[1]<=9;a[1]++)
{
for(a[2]=0;a[2]<=9;a[2]++)
{
for(a[3]=0;a[3]<=9;a[3]++)
{
for(a[4]=0;a[4]<=9;a[4]++)
{
for(a[5]=0;a[5]<=9;a[5]++)
{
if(a[0]==a[5]&&a[1]==a[4]&&a[2]==a[3]&&a[0]+a[1]+a[2]+a[3]+a[4]+a[5]==n)
printf("%d%d%d%d%d%d\n",a[0],a[1],a[2],a[3],a[4],a[5]);
}
}
}
}
}
}
}
return 0;
}
发布了36 篇原创文章 · 获赞 5 · 访问量 1015

猜你喜欢

转载自blog.csdn.net/matchless_QYW/article/details/104455367