#t230. 恰有一门课不及格的学生
恰有一门课不及格的学生
恰有一门课不及格的学生
题目描述
给出一名学生的语文和数学成绩,判断他是否恰好有一门课不及格(成绩小于分)。
输入格式
一行,包含两个在到之间的整数,分别是该生的语文成绩和数学成绩。
输出格式
若该生恰好有一门课不及格,输出;否则输出。
样例输入
50 80
样例输出
1
提示
一、比较的结果是 bool,可以当数字用
C++ 里 3 > 2 的值是 true,3 < 2 的值是 false。当它参与算术时:
true变成1false变成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。