问题描述
123321是一个非常特殊的数,它从左边读和从右边读是一样的。
输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n 。
输入格式
输入一行,包含一个正整数n。
输出格式
按从小到大的顺序输出满足条件的整数,每个整数占一行。
样例输入
52
样例输出
899998
989989
998899
数据规模和约定
1<=n<=54
解决方法
单个枚举,加以判断输出
有两种枚举方法,时间复杂度 方法2 < 方法1
方法1:
#include<iostream>
using namespace std;
int main()
{
const int _MIN = 10000;
const int _BOUND = 100000;
const int _MAX = 999999;
int n = 0;
int i;
int a1,a2,a3,a4,a5,a6;
cin >> n;
for(i = _MIN;i < _MAX; i++)
{
a1 = i % 10;
a2 = (i / 10) % 10;
a3 = (i / 100) % 10;
a4 = (i / 1000) % 10;
a5 = (i / 10000) % 10;
if(i < _BOUND)
{
a6 = 0;
if((a1 + a2 + a3 + a4 + a5 + a6) == n && a1 == a5 && a2 == a4)
{
cout << i << endl;
}
}else
{
a6 = (i / 100000) % 10;
if((a1 + a2 + a3 + a4 + a5 + a6) == n && a1 == a6 && a2 == a5 && a3 == a4)
{
cout << i << endl;
}
}
}
return 0;
}
直接以数字枚举,通过取余判断条件
#include<iostream>
using namespace std;
int main()
{
int n,sum;
cin>>n;
for(int i=1;i<=9;i++)
{
for(int j=0;j<=9;j++)
{
for(int k=0;k<=9;k++)
{
sum=0;
sum=i*2+j*2+k;
if(sum==n)
cout<<i<<j<<k<<j<<i<<endl;
}
}
}
for(int i=1;i<=9;i++)
{
for(int j=0;j<=9;j++)
{
for(int k=0;k<=9;k++)
{
sum=0;
sum=i*2+j*2+k*2;
if(sum==n)
cout<<i<<j<<k<<k<<j<<i<<endl;
}
}
}
return 0;
}
————————————————
版权声明:本文为优快云博主「烟波煮雨」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_37275680/article/details/79473976
直接以每一位进行循环,由于是回文数,因此只需要三个数进行循环
然后仅判断相加是否满足要求即可