入门 · 判断

奇数还是偶数

偶数就是能被 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 —— 全小写,就是这两个词。

样例:

输入输出
7odd
10even

范围里故意放了负数:−4 也是偶数。如果你的测试只查正数,就永远发现不了符号相关的 bug。

你的解答

main.cpp — 你的解答
「运行我的输入」用的自定义输入

判题在浏览器本地运行。死循环会在 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;
}