资源限制
时间限制:1.0s 内存限制:256.0MB
问题描述
观察数字:12321,123321 都有一个共同的特征,无论从左到右读还是从右向左读,都是相同的。这样的数字叫做:回文数字。
本题要求你找到一些5位或6位的十进制数字。满足如下要求:
该数字的各个数位之和等于输入的整数。输入格式
一个正整数 n (10<n<100), 表示要求满足的数位和。
输出格式
若干行,每行包含一个满足要求的5位或6位整数。
数字按从小到大的顺序排列。
如果没有满足条件的,输出:-1样例输入
44
样例输出
99899
499994
589985
598895
679976
688886
697796
769967
778877
787787
796697
859958
868868
877778
886688
895598
949949
958859
967769
976679
985589
994499样例输入
60
样例输出
-1
OJ版
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;int s[100];
int m=0;int check(int a)
{for(int i=0;i<100;i++){if(s[i]==a)return 1;} return 0;
}void input(int temp)
{if(check(temp)==0&&temp>10000){s[m]=temp;m++;}
}void output()
{sort(s,s+100);for(int i=0;i<100;i++){if(s[i]!=0) cout<<s[i]<<endl;}
} int main()
{int n;//给定数 cin>>n;int temp;for(int i=1;i<=9;i++){for(int j=0;j<=9;j++){for(int k=0;k<=9;k++){ if(i*4+j==n){temp=i*10000+i*1000+j*100+i*10+i;input(temp);}if(i*4+j*2==n){temp=i*100000+i*10000+j*1000+j*100+i*10+i;input(temp);}if(i*2+j*2+k*2==n){ temp=i*100000+j*10000+k*1000+k*100+j*10+i;input(temp);temp=i*100000+k*10000+j*1000+j*100+k*10+i;input(temp);}if(i*2+j*2+k==n){ temp=i*10000+j*1000+k*100+j*10+i;input(temp);temp=j*10000+i*1000+k*100+i*10+j;input(temp);}}}} output();if(s[100-m]==0)cout<<-1;
}
动态解释版
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;int s[100];
int m=0;int check(int a)
{for(int i=0;i<100;i++){if(s[i]==a)return 1;} return 0;
}void input(int temp,int i,int j,int k)
{if(check(temp)==0&&temp>10000){//cout<<i<<j<<k<<endl;s[m]=temp;//cout<<s[m]<<endl;m++;}
}void output()
{//cout<<m<<"!"<<endl;sort(s,s+100);for(int i=0;i<100;i++){if(s[i]!=0) cout<<s[i]<<endl;}
} int main()
{int n;//给定数 cin>>n;int temp;//三种组合形式 //9*4+8==44//9*4+4*2=44//9*2+8*2+5*2=44for(int i=1;i<=9;i++){for(int j=0;j<=9;j++){for(int k=0;k<=9;k++){ //cout<<i<<j<<k<<endl;if(i*4+j==n){//cout<<"A"<<endl; //cout<<i<<j<<k<<endl;//cout<<i<<i<<i<<i<<j<<endl;//temp=to_string(i*10000+i*1000+i*100+i*10+j);temp=i*10000+i*1000+j*100+i*10+i;input(temp,i,j,k);}if(i*4+j*2==n){//cout<<"B"<<endl; //cout<<i<<j<<k<<endl;//cout<<i<<i<<i<<i<<j<<j<<endl; //temp=to_string(i*100000+i*10000+i*1000+i*100+j*10+j);temp=i*100000+i*10000+j*1000+j*100+i*10+i;input(temp,i,j,k);}if(i*2+j*2+k*2==n){ //cout<<"C"<<endl; //cout<<i<<j<<k<<endl;//cout<<i<<i<<j<<j<<k<<k<<endl; //temp=to_string(i*100000+i*10000+j*1000+j*100+k*10+k);temp=i*100000+j*10000+k*1000+k*100+j*10+i;input(temp,i,j,k);temp=i*100000+k*10000+j*1000+j*100+k*10+i;input(temp,i,j,k);}if(i*2+j*2+k==n){ //cout<<"D"<<endl; //cout<<i<<j<<k<<endl;//cout<<i<<i<<j<<j<<k<<k<<endl; //temp=to_string(i*100000+i*10000+j*1000+j*100+k*10+k);temp=i*10000+j*1000+k*100+j*10+i;input(temp,i,j,k);temp=j*10000+i*1000+k*100+i*10+j;input(temp,i,j,k);}}}} output();//cout<<s[100-m];if(s[100-m]==0)cout<<-1;
}