1 条题解

  • 0
    @ 2026-10-8 21:09:26

    判断奇偶数

    一个自然的想法,和它栽在哪

    判断奇偶,谁都会:除以 2 看余数。n % 2 == 0 是偶数,输出 yes;否则输出 no。核心逻辑一行,这道题的分数几乎全部押在输出格式上。

    突破口:看清输出长什么样

    题面在提示栏里用四个感叹号强调了:输出是 y e s 和 n o——字母之间有空格!也就是说不是输出字符串 yes,而是四个字符(或三个字符)之间用空格隔开:

    printf("y e s");   /* 不是 printf("yes"); */
    

    这种"字符间加空格"的输出在早期 OJ 上很常见,目的就是检验你是否逐字符对照样例。记住一个习惯:交代码前,把自己的输出和样例逐个字符对一遍,空格、大小写、换行都算。

    代码实现

    #include <stdio.h>
    
    int main() {
        int n;
        scanf("%d", &n);
        if (n % 2 == 0)
            printf("y e s");
        else
            printf("n o");
        return 0;
    }
    

    也可以利用逻辑表达式的值直接输出 1/0?不行——这题要输出的是 y e s / n o 而非数字,老老实实 if。

    容易出错的细节

    1. 空格:输出 y e s 时三个字母之间各有一个空格,写成 yes 直接判错。这是本题唯一也是最狠的坑。
    2. 判奇偶用 n % 2 == 0 判偶最稳:如果反过来写"余 1 是奇数"(n % 2 == 1),在 n 为负数时 C 语言会给出 -1(余数符号跟被除数一致),导致负奇数被误判。判偶(% 2 == 0)不受此影响。
    3. 分支逻辑很简单,不要顺手写成 n / 2 * 2 == n 之类的花活,可读性更差。

    复杂度

    时间与空间复杂度均为 O(1)。

    这题的本质:一次取模判断,外加一次对输出格式的严格对齐。算法零难度,细心满分。

    • 1

    信息

    ID
    1709
    时间
    1000ms
    内存
    16MiB
    难度
    10
    标签
    递交数
    2
    已通过
    2
    上传者