📘简单枚举

2026-09-09
⭐⭐ GESP 4级

📖概念讲解

【考点 · 4级】 简单枚举 —— 暴力穷举法,把所有可能的情况逐一尝试,直到找到满足条件的解。属于基础算法策略。


【说人话】 就是"笨办法":把每种可能都试一遍。关键有两点:①确定枚举的范围(从哪到哪);②确定判断条件(什么时候算找到了)。当数据规模小(通常 n ≤ 1000)时,枚举是最简单靠谱的方法。可以搭配 continue 跳过不满足的情况来优化。

💻代码示例

1#include <iostream>
2using namespace std;
3
4// 找出 1~100 中所有"水仙花数"
5// 水仙花数:各位数字的立方和等于它本身
6// 例如 153 = 1³ + 5³ + 3³
7
8int main() {
9 // 外层循环:枚举 1~100 的每个数 i
10 for (int i = 1; i <= 100; i++) {
11 int a = i / 100; // 百位数
12 int b = (i / 10) % 10; // 十位数
13 int c = i % 10; // 个位数
14 // 判断:各位立方和是否等于自身
15 if (a*a*a + b*b*b + c*c*c == i) {
16 cout << i << " "; // 找到一个水仙花数,输出
17 }
18 }
19 return 0;
20}
21// 输出: 1

🧩互动小测

❓ 以下哪个场景最适合用枚举法?

❓ 枚举时用 continue 的作用是什么?

❓ 双重循环枚举两个变量 i 和 j(i从1到n,j从i到n),总共循环多少次?

🏋️动手练一练

📝 编程练习

找出 1~1000 中所有玫瑰花数(也叫自恋数/阿姆斯特朗数的变体):
如果一个三位数 abc 满足 a³ + b³ + c³ == abc,则它是玫瑰花数。

提示:用 % 和 / 提取各位数字,用三层循环或单层循环+位提取都行。输出所有找到的玫瑰花数,用空格分隔。
参考答案:
#include <iostream>
using namespace std;

int main() {
    // 枚举 100~999 的所有三位数
    for (int i = 100; i <= 999; i++) {
        int a = i / 100;           // 百位
        int b = (i / 10) % 10;     // 十位
        int c = i % 10;            // 个位
        if (a*a*a + b*b*b + c*c*c == i) {
            cout << i << " ";
        }
    }
    cout << endl;
    return 0;
}
// 输出: 153 370 371 407

要点: ① 只需枚举 100~999(三位数范围);② 用 / 和 % 提取各位数字是经典套路;③ 注意边界不要漏掉 100 和 999。

📝易错点提醒

学完这个知识点后点一下