Description
观察数字:12321,123321 都有一个共同的特征,无论从左到右读还是从右向左读,都是相同的。这样的数字叫做:回文数字。
本题要求你找到一些5位或6位的十进制数字。满足如下要求:
该数字的各个数位之和等于输入的整数。
Input
一个正整数 n (10<n<100), 表示要求满足的数位和。
Output
若干行,每行包含一个满足要求的5位或6位整数。
数字按从小到大的顺序排列。
如果没有满足条件的,输出:-1
解析:枚举每一位数,因为是回文数,前一半和后一半相同,所以5位数和6位数都只需要一个O(n^3)的时间复杂度,n为10。需要注意的地方是除了第一位其他位是可以等于0的。
#include <iostream> #include <cstdio> #include <cstring> #include <bits/stdc++.h> #include <queue> #include <algorithm> #include <map> #include <cstdlib> using namespace std; int main() { int n; scanf("%d", &n); if(n > 54) printf("-1\n"); else { for (int i = 1; i < 10; i ++) { for(int j = 0; j < 10; j ++) { for(int k = 0; k < 10; k ++) { if(i + j + k + j + i == n) { printf("%d\n",i * 10000 + j * 1000 + k * 100 + j * 10 + i * 1); } } } } for (int i = 1; i < 10; i ++) { for(int j = 0; j < 10; j ++) { for(int k = 0; k < 10; k ++) { if(i + j + k + k + j + i == n) { printf("%d\n",i * 100000 + j * 10000 + k * 1000 + k * 100+ j * 10 + i * 1); } } } } } return 0; }
