1. 3的倍数枚举(基础)
题目:在之间有10和50多少个数是3的倍数?列举这些数。
解析:
枚举10到50之间的数,判断是否能被3整除。
优化:计算第一个≥10的3的倍数(12=3×4),最后一个≤50的3的倍数(48=3×16),总数=16-4+1=13个。
代码:
cpp
#include <iostream> using namespace std; int main() {int count = 0;for (int i = 10; i <= 50; i++) {if (i % 3 == 0) {cout << i << " ";count++;}}cout << "\nTotal: " << count << " numbers";return 0; }
输出:
text
12 15 18 21 24 27 30 33 36 39 42 45 48 Total: 13 numbers
2. 硬币组合枚举(分类枚举)
题目:用1元、2元、5元硬币凑出10元,共有多少种组合?(每种至少用1枚)
解析:
枚举5元硬币的可能数量(最多2枚),再枚举2元硬币的数量,计算1元硬币的数量。
确保总金额=10元且每种硬币≥1枚。
代码:
cpp
#include <iostream> using namespace std; int main() {int count = 0;for (int five = 1; five <= 2; five++) {for (int two = 1; two <= (10 - five * 5) / 2; two++) {int one = 10 - five * 5 - two * 2;if (one >= 1) {cout << "5元×" << five << " + 2元×" << two << " + 1元×" << one << endl;count++;}}}cout << "Total: " << count << " ways";return 0; }
输出:
text
5元×1 + 2元×1 + 1元×3 5元×1 + 2元×2 + 1元×1 Total: 2 ways
3. 数字排列枚举(有序枚举)
题目:用数字1、3、5组成无重复的两位数,列举所有可能。
解析:
枚举十位数(1、3、5),再枚举个位数(不能与十位重复)。
代码:
cpp
#include <iostream> using namespace std; int main() {int digits[] = {1, 3, 5};for (int i = 0; i < 3; i++) {for (int j = 0; j < 3; j++) {if (digits[i] != digits[j]) {cout << digits[i] * 10 + digits[j] << " ";}}}return 0; }
输出:
text
13 15 31 35 51 53
4. 台阶走法枚举(递推枚举)
题目:有5级台阶,每次可走1级或2级,共有多少种走法?列举所有走法。
解析:
枚举1级和2级的组合,确保总步数=5。
例如:1+1+1+1+1、1+1+1+2、1+2+2等。
代码:
cpp
#include <iostream> using namespace std; int main() {int count = 0;for (int two = 0; two <= 2; two++) { // 最多2步2级int one = 5 - two * 2;if (one >= 0) {cout << "1级×" << one << " + 2级×" << two << endl;count++;}}cout << "Total: " << count << " ways";return 0; }
输出:
text
1级×5 + 2级×0 1级×3 + 2级×1 1级×1 + 2级×2 Total: 3 ways
5. 长方形拼法枚举(几何枚举)
题目:用12个相同的小正方形拼成长方形,共有多少种拼法?(长≥宽)
解析:
枚举长和宽的组合,使得长×宽=12。
例如:12×1、6×2、4×3。
代码:
cpp
#include <iostream> using namespace std; int main() {int count = 0;for (int width = 1; width <= 12; width++) {if (12 % width == 0) {int length = 12 / width;if (length >= width) {cout << length << "×" << width << endl;count++;}}}cout << "Total: " << count << " ways";return 0; }
输出:
text
12×1 6×2 4×3 Total: 3 ways
总结
以上题目涵盖:
基础枚举(3的倍数)
组合枚举(硬币问题)
排列枚举(数字组合)
递推枚举(台阶走法)
几何枚举(长方形拼法)