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;
}