本题要求你找到一些5位或6位的十进制数字。满足如下要求:
该数字的各个数位之和等于输入的整数。
数字按从小到大的顺序排列。
如果没有满足条件的,输出:-1
499994
589985
598895
679976
688886
697796
769967
778877
787787
796697
859958
868868
877778
886688
895598
949949
958859
967769
976679
985589
994499
思路:先把回文的序列的表打好,算出来正好就1800,所以我数组开的2000
然后从前到后扫一遍即可,满足条件就输出。。
AC代码:
#include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int maxn = 2000; int palin[maxn], num = 0; int is_palin(int n) //判断是否是回文数 { if(n<100000) { if( (n/10000 == n%10) && (n/1000%10 == n/10%10) ) return 1; } else { if((n/100000 == n%10) && (n/10000%10 == n/10%10) && (n/1000%10 == n/100%10)) return 1; } return 0; } void init() //回文数打表 { for(int i=10000; i<=999999; i++) { if(is_palin(i)) palin[num++] = i; } } int fun(int n) //判断是否符合条件 { int t = 0, m = n; while(m) { t += m%10; m /= 10; } return t; } int main() { init(); int n; while(scanf("%d", &n) != EOF) { if(n < 5 || n>54) { printf("-1n"); continue; } for(int i=0; i<num; i++) { if(fun(palin[i]) == n) printf("%dn", palin[i]); } } return 0; }