作业比赛编号 : 3187 - 【CSPtch-Jing】循环6 | 枚举(穷举)
枚举(穷举)
把可能的答案一个一个试一遍,再找出符合条件的答案。一、什么是枚举?
枚举就像逐个检查一排盒子:先试一个,再看它符不符合要求;不符合就继续试下一个,直到找到答案。
猜一个答案从题目可能的答案中,拿出一个来试一试。
检查条件判断这个答案是否满足题目要求,找到解答后按题意记录或输出。
二、枚举的三个要素
1. 枚举对象要一个一个尝试什么?是价格、数量,还是某个数字?
2. 枚举范围从哪里开始,到哪里结束?例如 1~100。
3. 枚举顺序从小到大,还是从大到小?根据题目要求决定。
小提示:题目要找最大的答案,可以考虑从大到小试;要找最小的答案,可以考虑从小到大试。
三、枚举的四个步骤
- 1
确定枚举对象,例如数字 x。 - 2
确定 x 的范围,例如 1 到 20。 - 3
用for循环逐个尝试。 - 4
用if判断条件是否成立。
四、例子:找出 1~20 中的偶数
枚举对象是数字x,范围是 1~20。偶数的条件是除以 2 余数为 0,也就是 x % 2 == 0。试一试:1 不是偶数,2 是;3 不是偶数,4 是……一直检查到 20。
答案:2、4、6、8、10、12、14、16、18、20。
答案:2、4、6、8、10、12、14、16、18、20。
int main() {
for (int x = 1; x <= 20; x++) {
if (x % 2 == 0) cout << x << " ";
}
return 0;
}
五、枚举的基本模板
把题目中的开始值、结束值和判断条件填进这个骨架:for (int x = 开始值; x <= 结束值; x++) {
if (题目条件成立) {
// x 是符合条件的答案
// 按题目要求输出或记录 x
}
}
从小到大适合按从小到大的顺序找答案,或找最小的答案。
从大到小适合找最大的答案。若第一个符合条件的就是答案,可以停止继续尝试。
六、例子:找最大的符合条件的数
找出 1~100 中最大的、既是 3 的倍数又是 5 的倍数的数。因为要找“最大”的数,可以从 100 开始往下试。判断条件是
x % 3 == 0 && x % 5 == 0。for (int x = 100; x >= 1; x--) {
if (x % 3 == 0 && x % 5 == 0) {
cout << x;
break; // 第一个找到的就是最大的
}
}
答案是 90。100 不是 3 的倍数,99 不是 5 的倍数,继续往下检查,90 同时是 3 和 5 的倍数。
七、写完以后检查一下
- 枚举对象是什么?变量有没有表示清楚?
- 范围有没有包括最小值和最大值?
- 循环方向正确吗?每一轮有没有向前或向后移动?
if的条件是否完整?多个条件注意&&表示“并且”。- 找到了答案后,题目要求继续找其他答案,还是可以停止?
- 手算边界附近的几个数,检查是否漏试或多试。
记忆小口诀:先定对象和范围,循环逐个来尝试;条件放进 if,符合要求就是答案。
