top1编程
← 返回题目
题解

【入门】回文偶数

1 条题解

  • 0
    @ 2026-8-1 9:37:32

    解题思路

    题目要求我们找出所有 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