B3741 [语言月赛202304] 排名 题解
未来姚班zyl
·
·
题解
Source & Knowledge
## 题目大意
这是[题目内容](https://www.luogu.com.cn/problem/B3741)
就是已知两个队伍的通过题目数与罚时,要按照通过题目数优先,通过题目数相同时,罚时短者胜的原则对他们排名,输出靠前的队伍。
## 题目分析
本题考查分支结构。
就着这道题来讲一讲做一道题的过程。
第一步,阅读题目内容,了解大意。
第二步,确定需要定义的变量及其类型。在本题中,需要定义的变量有四个,分别是 $A_{1}$、$P_{1}$、$A_{2}$、$P_{2}$。它们都是正整数,且范围很小,所以定义它们的类型为 $int$。
第三步,按照大意,认真思考,得出解决方案,并写程序实现。
以这题为例,可以直接按照题意,用判断语句,如果 $A_{1}>A_{2}$,则第一队排名靠前,否则,如果 $A_{1}<A_{2}$,则第二队排名靠前,否则,通过题目量一定相同,如果 $P_{1}<P_{2}$,则第一队排名靠前,否则,第二队排名靠前。(因为题目保证了没有排名相同的情况)核心代码如下:
```cpp
if(a1>a2)
cout <<"\"\\n\"";//要按题目提示的格式输出,因为""和\单独使用时是特殊字符
else if(a1<a2)
cout <<"\"\\t\"";
else if(p1<p2)
cout <<"\"\\n\"";
else
cout <<"\"\\t\"";
```
这样写比较繁琐,因为写了四个判断语句,想一想能不能简化?
在本题中,排名靠前的,要么是第一队,要么是第二队。那么,我们可以先判断第一队是否靠前,如果靠前,则直接输出,否则,一定是第二队靠前。第一队获胜有两种情况:通过题目数更多或者通过题目数相同且罚时更少。
这样只用一条判断语句(和一句 $else$)就能解决问题了。注意,在符号运算优先级不确定时,一定要加括号。
核心代码如下:
```cpp
if(a1 > a2 || (a1 == a2 && p1 < p2))
cout <<"\"\\n\"";
else cout <<"\"\\t\"";
}
```
## 视频讲解
