问题描述
123321是一个非常特殊的数,它从左边读和从右边读是一样的。
输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n 。
输入格式
输入一行,包含一个正整数n。
按从小到大的顺序输出满足条件的整数,每个整数占一行。
样例输入
52
样例输出
899998
989989
998899
数据规模和约定
1<=n<=54。
思路:
法一:同上题,求出位数后按需比较。先数后位。
法二:网络解法,先位后数,比较巧妙,效率差不多(CPU使用时间小于法一)。
法三:不解释,节省运算,略优于法二。
代码:
法一:
#include<iostream>
using namespace std;
int main(){
int a, b, c, d, e, f, g, n;
cin >> n;
for(int i=10000; i<100000; ++i){
//12321
a = i/10000;
b = i/1000%10;
c = i/100%10;
d = i/10%10;
e = i%10;
if(a==e && b==d && (a+b+c+d+e==n)){
cout << i << endl;
}
}
for(int i=100000; i<1000000; ++i){
//123321
a = i/100000;
b = i/10000%10;
c = i/1000%10;
d = i/100%10;
e = i/10%10;
f = i%10;
if(a==f && b==e && c == d && (a+b+c+d+e+f==n)){
cout << i << endl;
}
}
return 0;
}
法二:
#include<iostream>
using namespace std;
int main(){
int a,b,c,d,e,f,t,all;
scanf("%d",&t);
for(a=1;a<10;a++)
for(b=0;b<10;b++)
for(c=0;c<10;c++)
for(d=0;d<10;d++)
for(e=0;e<10;e++)
{
if(a==e)
if(b==d)
{
all=a+b+c+d+e;
if(all==t)
printf("%dn",a*10000+b*1000+c*100+d*10+e);
}
}
for(a=1;a<10;a++)
for(b=0;b<10;b++)
for(c=0;c<10;c++)
for(d=0;d<10;d++)
for(e=0;e<10;e++)
for(f=0;f<10;f++)
{
if(a==f)
if(b==e)
if(c==d)
{
all=a+b+c+d+e+f;
if(all==t)
printf("%dn",a*100000+b*10000+c*1000+d*100+e*10+f);
}
}
return 0;
}
法三:
int main()
{
int n,a,b,c,t;
cin>>n;
for(a=1;a<10;a++)
for(b=0;b<10;b++)
for(c=0;c<10;c++)
{
t=a*10001+b*1010+c*100;
if(2*a+2*b+c==n)
cout<<t<<endl;
}
for(a=1;a<10;a++)
for(b=0;b<10;b++)
for(c=0;c<10;c++)
{
t=a*100001+b*10010+c*1100;
if(2*a+2*b+2*c==n)
cout<<t<<endl;
}
return 0;
}
This blog is under a CC BY-NC-SA 3.0 Unported License
本文链接:https://idforhyit.github.io/2019/02/26/BASIC-9/
近期评论