版权声明:本文为博主原创文章,转载请注明出处-- https://blog.csdn.net/qq_38790716/article/details/88380094
问题描述
123321是一个非常特殊的数,它从左边读和从右边读是一样的。
输入一个正整数 ,编程求所有这样的五位和六位十进制数,满足各位数字之和等于n 。
输入格式
输入一行,包含一个正整数 。
输出格式
按从小到大的顺序输出满足条件的整数,每个整数占一行。
样例输入
52
样例输出
899998
989989
998899
数据规模和约定
1<= <=54。
枚举
1.分别枚举5位与6位的情况,进行判断是否等于
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
for (int i = 1;i <= 9; ++i) {
for (int j = 0; j <= 9; ++j) {
for (int k = 0;k <= 9; ++k) {
if ((i + j) * 2 + k == n) {
cout << i << j << k << j << i<< endl;
}
}
}
}
for (int i = 1; i <= 9; ++i) {
for (int j = 0; j <= 9; ++j) {
for (int k = 0;k <= 9; ++k) {
if ((i + j + k) * 2 == n) {
cout << i << j << k << k << j << i<< endl;
}
}
}
}
return 0;
}
2.因为要求的回文数是5位或6位,所以可以直接从10000判断到1000000,看这些数中哪些满足要求
#include <iostream>
using namespace std;
int n;
int digit[6];
bool judge(int x) {
int m = 0, sum = 0;
while (x) {
digit[m++] = x % 10;
sum += x % 10;
x /= 10;
}
if (sum != n) {
return false;
}
for (int i = 0; i < m / 2; ++i) {
if (digit[i] != digit[m - i - 1]) {
return false;
}
}
return true;
}
int main() {
cin >> n;
for (int i = 10000; i < 1000000; ++i) {
if (judge(i)) {
cout << i << endl;
}
}
return 0;
}