L1-055 谁是赢家(10 分)[java][python]

题目描述

某电视台的娱乐节目有个表演评审环节,每次安排两位艺人表演,他们的胜负由观众投票3名评委投票两部分共同决定。规则为:

  1. 如果一位艺人的观众票数高,且得到至少1名评委的认可,该艺人就胜出
  2. 或艺人的观众票数低,但得到全部评委的认可,也可以胜出

节目保证投票的观众人数为奇数,所以不存在平票的情况。


输入输出格式

项目 说明
输入格式 第一行: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个评委票 该艺人获胜

算法步骤:

  1. 读取 Pa 和 Pb,比较大小确定谁观众票更高
  2. 读取3个评委投票,统计 a 和 b 各得多少票
  3. 按规则判断获胜者并输出

关键点:

  • 观众票不会相等(题目保证),不需要处理平票
  • 只需判断"观众票高者是否至少获得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 分支即可,逻辑清晰无坑。

相关推荐
markinmarkin1 小时前
Spring 中Bean 的作用域有哪些?
java·后端·spring
oyguyteggytrrwwwrt1 小时前
自制交叉线路识别算法
算法
手写码匠1 小时前
华为云Flexus+DeepSeek征文|Dify 多智能体协同编排实战:R1 规划 + V3 执行,构建企业 Agent 团队
人工智能·深度学习·算法·aigc
山荷枝2 小时前
Java学习第十天
java·学习
晓天衡宇•评测社区2 小时前
FSR-Bench 前沿科学推理榜单发布:GPT-5.5 居首,“会推理”未必“能答对”
算法
matlabgoodboy2 小时前
计算机毕设代做|Java Python Matlab APP 全套开发设计
java·python·课程设计
用户8356290780512 小时前
Python Word 转 PDF 和 PDF 转 Word 指南
后端·python
用户8356290780513 小时前
如何使用 Python 加密和保护 Word 文档
后端·python
Fluxproxy3 小时前
AI数据集采集、批量模型推理报错频发?AI项目网络稳定性优化实战
python·ai·ai编程
程序喵大人3 小时前
【C++进阶】STL算法与函数对象 - 02 sort为什么需要随机访问迭代器
开发语言·c++·算法