题解
【入门】回文偶数
1 条题解
-
0
解题思路
题目要求我们找出所有 3 位 的、既是回文数又是偶数 的数。
什么叫三位数?就是 100 到 999 之间的数,一共有 900 个。比如 202、121、303、998 都是三位数。
什么叫回文数?就是正着读和倒着读完全一样的数,就像照镜子。例如:
- 202:正着读是 202,倒着读还是 202,是回文数;
- 121:正着读是 121,倒着读还是 121,是回文数;
- 303:正着读是 303,倒着读还是 303,是回文数。
什么叫偶数?就是能被 2 整除的数,也就是个位是 0、2、4、6、8 的数。例如 202 是偶数(个位是 2),而 121 不是偶数(个位是 1),303 也不是偶数(个位是 3)。
把两个条件合在一起看几个例子:
- 202:回文 ✓,偶数 ✓,两个都满足,要输出!
- 121:回文 ✓,偶数 ✗,只满足一个,不输出;
- 303:回文 ✓,偶数 ✗,只满足一个,不输出;
- 242:回文 ✓(2 和 2 相等),偶数 ✓,要输出!
一个三位数可以写成:百位 × 100 + 十位 × 10 + 个位。 在程序里,如果有一个三位数 i,我们可以这样拆出它的每一位:
- 百位 = i / 100(整数除法:比如 202 / 100 = 2);
- 十位 = i / 10 % 10(比如 202 / 10 = 20,20 % 10 = 0);
- 个位 = i % 10(比如 202 % 10 = 2)。
因为只有三位,判断回文其实很简单:只要百位等于个位,正着读和倒着读就一样了。 所以我们的办法是:从 100 到 999 一个数一个数地检查, 只要同时满足"百位 == 个位"和"是偶数",就把它输出,每行一个。
参考代码
#include <iostream> // 用于 cin/cout 输入输出 using namespace std; int main() { // 枚举所有三位数:从 100 到 999 for (int i = 100; i <= 999; i++) { int a = i / 100; // 百位:比如 202 除以 100 得 2 int c = i % 10; // 个位:比如 202 取模 10 得 2 // 判断条件1:回文数(百位等于个位),如 202、121、303 都是回文 // 判断条件2:偶数(个位是 0、2、4、6、8,即个位能被 2 整除) if (a == c && c % 2 == 0) { cout << i << endl; // 两个条件都满足,输出这个数 } } return 0; }复杂度分析
- 时间复杂度:程序从 100 检查到 999,一共 900 个数,每个数只做几次简单运算。因为三位数的个数是固定的,时间复杂度可以看成 O(1)(严格写是 O(900))。
- 空间复杂度:只用了几个人 int 变量存放百位、个位,没有使用额外的数组,所以空间复杂度是 O(1)。
- 1