入门 · 判断
奇数还是偶数
偶数就是能被 2 整除,而「能被 2 整除」在代码里就是 n % 2 == 0。这一个表达式就是全部判断,if 只负责选印哪个词。
一句话答案读入 <code>n</code>;<code>n % 2 == 0</code> 就输出 <code>even</code>,否则 <code>odd</code>。
题目
输入: 一个整数 n(−10000 ≤ n ≤ 10000)。
输出: even 或 odd —— 全小写,就是这两个词。
样例:
| 输入 | 输出 |
|---|---|
7 | odd |
10 | even |
范围里故意放了负数:−4 也是偶数。如果你的测试只查正数,就永远发现不了符号相关的 bug。
你的解答
「运行我的输入」用的自定义输入
判题在浏览器本地运行。死循环会在 3 秒后被自动中断 —— 但还是确保每个循环都有出口。代码随打随存。
卡住了?提示
提示 1 — 取模给出余数
n % 2 是除以 2 的余数:偶数得 0,奇数得 1(C++ 里负数得 −1)。所以和 == 0 比较就是完整的偶数判断 —— 根本不用关心符号。
提示 2 — 一个 if,一个 else
两种输出意味着一个 if (...) { ... } else { ... }。别写两个独立的 if —— 第二个会在第一个命中时照样执行,两个词都印出来。
提示 3 — 条件后面别加分号
if (n % 2 == 0); 是一个带空语句的完整 if —— 后面的打印语句就变成无条件执行了。这是所有有这语法的语言里排名前三的新手 bug。
题解(先自己试试!)
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
if (n % 2 == 0) {
cout << "even" << endl;
} else {
cout << "odd" << endl;
}
return 0;
}
同一个取模判断,在 奇偶统计 里升级成计数器 —— 对象从单个数变成整个数组。如果对分岔还不熟,课程第 3 课用成绩分档带你走一遍。
深度解析
为什么这样做对
能被 2 整除恰好就是 n % 2 == 0,负数也成立:C++ 的余数符号跟随被除数,所以 −4 % 2 是 0、−3 % 2 是 −1 —— 只要不是真偶数就不会是零。一个判断覆盖整个范围。
代价
O(1) —— 一次取模、一次比较。
常见错法
- 写成
if (n % 2 == 1)判奇数。有负数时 −3 % 2 是 −1 而不是 1,奇数分支永远不触发。应该测== 0,或者用!= 0。 - 条件后多一个分号(
if (n % 2 == 0);),函数体变空,打印变成无条件执行。 - 写两个独立的
if而不是if/else:两个词都会打印。
下一步
同一个判断,升级成对整个数组计数:奇偶统计。
记住这两句
- 偶数 =
n % 2 == 0;可能有负数时,永远测零,绝不测一。 - 两种输出只需要一个 if/else,不是两个 if。
🐞 这段是错的 —— 点开,亲手让它挂一次
测的是 % 2 == 1 —— 所有负数都被当成偶数漏过去
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
if (n % 2 == 1) {
cout << "odd" << endl; // bug: never true for negatives
} else {
cout << "even" << endl;
}
return 0;
}