#t230. 恰有一门课不及格的学生

恰有一门课不及格的学生

恰有一门课不及格的学生

题目描述

给出一名学生的语文和数学成绩,判断他是否恰好有一门课不及格(成绩小于 60 \,60\,分)。

输入格式

一行,包含两个在 0 \,0\,到 100 \,100\,之间的整数,分别是该生的语文成绩和数学成绩。

输出格式

若该生恰好有一门课不及格,输出 1\,1;否则输出 0\,0。

样例输入

50 80

样例输出

1

提示

一、比较的结果是 bool,可以当数字用

C++ 里 3 > 2 的值是 true,3 < 2 的值是 false。当它参与算术时:

  • true 变成 1
  • false 变成 0
printf("%d\n", 3 > 2);        // 1
printf("%d\n", 3 < 2);        // 0
printf("%d\n", (3 > 2) + (1 > 2));   // 1 + 0 = 1

二、「恰好一个成立」可以数个数

两个条件的结果相加,等于 1 就表示恰好一个成立:

int a = 70, b = 50;                 // 两门课的成绩
int cnt = (a < 60) + (b < 60);      // 各得 0 或 1
if (cnt == 1) {
    printf("exactly one failed\n");
}

这比写一长串 (a<60 && b>=60) || (a>=60 && b<60) 直观得多,也不容易漏情况。

三、注意括号

+ 的优先级高于比较,写 a < 60 + (b < 60) 会变成 a < (60 + 0)。每个比较都套一对括号最保险。

四、常见错误

  • 忘了加括号,被优先级坑;

  • 直接把 bool 用 %d 打印却忘了它只会输出 0/1;

  • 用 cnt == 1 判断「至少一个」——那是 >= 1。

  • 先把两个「是否不及格」分别算出来,存成两个条件。

  • 再表达「恰好一个为真」:要么用加法数个数,要么用「不相等」。

  • 注意不及格是小于 60,不含 60。

自查:用 50 80、50 50、80 80 三种输入分别验证,结果应是 1、0、0。