题目描述
某电视台的娱乐节目有个表演评审环节,每次安排两位艺人表演,他们的胜负由观众投票 和3名评委投票两部分共同决定。规则为:
- 如果一位艺人的观众票数高,且得到至少1名评委的认可,该艺人就胜出
- 或艺人的观众票数低,但得到全部评委的认可,也可以胜出
节目保证投票的观众人数为奇数,所以不存在平票的情况。
输入输出格式
| 项目 | 说明 |
|---|---|
| 输入格式 | 第一行:Pa 和 Pb(艺人a和艺人b的观众票数,不超过1000,不相等);第二行:3名评委投票(0=投给a,1=投给b) |
| 输出格式 | The winner is x: P1 + P2(x=a/b,P1=赢家观众票,P2=赢家评委票) |
样例
输入:
327 129
1 0 1
输出:
The winner is a: 327 + 1
解题思路
胜负判定逻辑
| 条件 | 结果 |
|---|---|
| 观众票高 + 至少1个评委票 | 该艺人获胜 |
| 观众票低 + 全部3个评委票 | 该艺人获胜 |
算法步骤:
- 读取 Pa 和 Pb,比较大小确定谁观众票更高
- 读取3个评委投票,统计 a 和 b 各得多少票
- 按规则判断获胜者并输出
关键点:
- 观众票不会相等(题目保证),不需要处理平票
- 只需判断"观众票高者是否至少获得1个评委票",若否则对方获胜
- 或判断"观众票低者是否获得全部3个评委票",若是则对方获胜
代码实现
Java 代码
java
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int Pa = sc.nextInt(); // 艺人a的观众票
int Pb = sc.nextInt(); // 艺人b的观众票
int countA = 0; // 评委给a的票数
int countB = 0; // 评委给b的票数
for (int i = 0; i < 3; i++) {
int vote = sc.nextInt();
if (vote == 0) {
countA++;
} else {
countB++;
}
}
if (Pa > Pb) { // a观众票更高
if (countA >= 1) { // a至少获得1个评委票
System.out.println("The winner is a: " + Pa + " + " + countA);
} else { // a没获得评委票,b获胜
System.out.println("The winner is b: " + Pb + " + " + countB);
}
} else { // b观众票更高
if (countB >= 1) { // b至少获得1个评委票
System.out.println("The winner is b: " + Pb + " + " + countB);
} else { // b没获得评委票,a获胜
System.out.println("The winner is a: " + Pa + " + " + countA);
}
}
sc.close();
}
}
Python 代码
python
pa, pb = map(int, input().split())
votes = input().split() # 3个评委投票
if pa > pb: # a观众票更高
count_a = votes.count('0')
count_b = 3 - count_a
if count_a >= 1:
print(f'The winner is a: {pa} + {count_a}')
else:
print(f'The winner is b: {pb} + {count_b}')
else: # b观众票更高
count_b = votes.count('1')
count_a = 3 - count_b
if count_b >= 1:
print(f'The winner is b: {pb} + {count_b}')
else:
print(f'The winner is a: {pa} + {count_a}')
运行验证
样例验证
输入:
327 129
1 0 1
| 艺人 | 观众票 | 评委票 | 说明 |
|---|---|---|---|
| a | 327(高) | 1 | 观众票高+至少1评委票 → a获胜 ✅ |
输出: The winner is a: 327 + 1 ✅
边界测试
| 输入 | 评委投票 | 分析 | 输出 |
|---|---|---|---|
100 200\n0 0 0 |
全投a | b观众高但0评委票 → a全评委3票 | The winner is a: 100 + 3 |
50 100\n1 1 0 |
2票投b | b观众高+2评委票 → b获胜 | The winner is b: 100 + 2 |
200 50\n1 1 1 |
全投b | a观众高但0评委票 → b全评委3票 | The winner is b: 50 + 3 |
复杂度分析
- 时间复杂度:O(1),只处理固定数量的输入
- 空间复杂度:O(1),只使用常数级变量
总结
本题考察条件判断和简单的逻辑推理。核心在于正确理解胜负规则:
- 观众票高者需至少1个评委票才能获胜
- 观众票低者需全部3个评委票才能翻盘
代码实现只需理清 if-else 分支即可,逻辑清晰无坑。