(五) 从文字规则整理优先级
如果题面给出一般规则和例外,先找出例外覆盖的范围,而不是把所有条件直接用“或”连接。
1. 完整示例:闰年判断
题目原文(自拟): 输入 1 <= year <= 9999 的年份。按公历规则判断是否为闰年:能被 4 整除通常是闰年;能被 100 整除的年份只有同时能被 400 整除才是闰年。闰年输出 YES,否则输出 NO。
分析推导: 先拆成两种互相兼容的合法情况:能被 400 整除,或者能被 4 整除且不能被 100 整除。
#include <iostream>
using namespace std;
int main() {
int year;
cin >> year;
// 整百年份由 400 的条件决定,普通年份检查 4 的条件。
bool leap = year % 400 == 0 || (year % 4 == 0 && year % 100 != 0);
cout << (leap ? "YES" : "NO") << '\n';
}样例与解释: 2000 输出 YES,1900 输出 NO,2024 输出 YES。1900 是只检查 % 4 == 0 时会答错的反例。时间、额外空间均为 \(O(1)\)。