1 条题解
-
0
判断奇偶数
一个自然的想法,和它栽在哪
判断奇偶,谁都会:除以 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。容易出错的细节
- 空格:输出
y e s时三个字母之间各有一个空格,写成yes直接判错。这是本题唯一也是最狠的坑。 - 判奇偶用
n % 2 == 0判偶最稳:如果反过来写"余 1 是奇数"(n % 2 == 1),在 n 为负数时 C 语言会给出 -1(余数符号跟被除数一致),导致负奇数被误判。判偶(% 2 == 0)不受此影响。 - 分支逻辑很简单,不要顺手写成
n / 2 * 2 == n之类的花活,可读性更差。
复杂度
时间与空间复杂度均为 O(1)。
这题的本质:一次取模判断,外加一次对输出格式的严格对齐。算法零难度,细心满分。
- 空格:输出
- 1
信息
- ID
- 1709
- 时间
- 1000ms
- 内存
- 16MiB
- 难度
- 10
- 标签
- 递交数
- 2
- 已通过
- 2
- 上传者