前言
简单问题,写的不好,大佬见谅.
如有疏漏,恳请指正,小编垂首.
问题描述:
有这样一类数字,他们顺着看和倒着看是相同的数,例如:121,656,2332等,这样的数字就称为:回文数字。编写一个函数,判断某数字是否是回文数字。 现在要从 5位或 6位的十进制数字中找出各个数位之和等于 n 的回文数字。

问题解析:
- 回文数字5-6位
- 依旧是位数分开遍历,因为是会文数的,所以三个嵌套循环就好
- 因为要按大小排列,所以不能一个三循环内判断,所以写了两个
- 因为要判断是否存在合适的数字,可以添加标记,不过应该只有全为9还小于n的情形才会返回-1吧
实现代码:
代码如下(示例):
#include<iostream>
using namespace std;
int main() {
int n;
cin >> n;
if (n <= 54) {//6*9=54
if (n <= 45) {//5*9=45
for (int i = 1; i < 10; i++) {
for (int j = 0; j < 10; j++) {
for (int k = 0; k < 10; k++) {
if (n == i * 2 + j * 2 + k) {//五位数
cout << (i * 10000 + j * 1000 + k * 100 + j * 10 + i) << "\t";
}
}
}
}
}
if (!(n & 1)) {//如果是偶数再查找6位的回文
for (int i = 1; i < 10; i++) {
for (int j = 0; j < 10; j++) {
for (int k = 0; k < 10; k++) {
if (n == i * 2 + j * 2 + k * 2) {//六位数
cout << (i * 100000 + j * 10000 + k * 1000 + k * 100 + j * 10 + i) << "\t";
}
}
}
}
}
else if (n > 45) {//说明五位也没有
cout << -1 << endl;
}
}
else cout << -1 << endl;
return 0;
}
注意事项
如果是奇数,就只能是五位数呢!!!
所以,就不遍历6位的循环啦!😁
测试案例:

总结
算法不难,主要是细心
1131

被折叠的 条评论
为什么被折叠?



