回文数 1221是一个非常特殊的数,它从左边读和从右边读是一样的,编程求所有这样的四位十进制数。按从小到大的顺序输出满足条件的四位十进制数。
我先用的1000-10000,编译答案是对的,但不知是超时还是什么原因,没通过。代码如下:
#include<iostream>
using namespace std;
int main(){
int i,j,a,b,c,d;
for(i=1000;i<10000;i++){
a=i/1000;
b=i%1000/100;
c=i%100/10;
d=i%10;
if(a==d && b==c){
cout<<i<<" ";
}else{
continue;
}
}
return 0;
}
然后我借鉴了之后,意识到这是个四位数,同时也是四个数,只是1.4位为一个数,2.3位为一个数。下面代码通过了~
#include<iostream>
using namespace std;
int main(){
for (int a = 1; a < 10; ++ a)
for (int b = 0; b < 10; ++ b)
cout << a*1000+b*100+b*10+a << endl;
return 0;
}
特殊回文数:123321是一个非常特殊的数,它从左边读和从右边读是一样的。输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n (1<=n<=54)。输入一行,包含一个正整数n。按从小到大的顺序输出满足条件的整数,每个整数占一行。
样例输入
52
样例输出
899998
989989
998899
满分代码如下:
#include<iostream>
using namespace std;
int main(){
int n,a,b,c;
cin>>n;
for (a = 1; a < 10; ++ a)
for (b = 0; b < 10; ++ b)
for(c= 0; c < 10; ++ c)
{
if( 2*a+2*b+c == n )
{
cout << a*10000+b*1000+c*100+b*10+a << endl;
}else {
continue;
}
}
for (a = 1; a < 10; ++ a)
for (b = 0; b < 10; ++ b)
for(c= 0; c < 10; ++ c)
{
if(2*(a+b+c) == n){
cout << a*100000+b*10000+c*1000+c*100+b*10+a << endl;
}else{
continue;
}
}
return 0;
}
注意这边的循环不能合并(合并的代码只得了40分),比如输入14的时候,5位和6位的结果会交叉出现,没有实现排序。