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 分支即可,逻辑清晰无坑。

相关推荐
小小测试开发12 小时前
安装 Python 3.10+
开发语言·人工智能·python
KaMeidebaby13 小时前
卡梅德生物技术快报|PD1 单克隆抗体定制配套 N 糖全谱质控开发
前端·人工智能·算法·数据挖掘·数据分析
梦想不只是梦与想13 小时前
Python 中的装饰器
python·装饰器
我叫唧唧波13 小时前
Python+AI 全栈学习笔记
人工智能·python·学习
8Qi813 小时前
LeetCode 235. 二叉搜索树的最近公共祖先(LCA)
算法·leetcode·二叉树·递归·二叉搜索树·lca·迭代
bIo7lyA8v14 小时前
算法稳定性分析中的随机扰动建模的技术8
算法
copyer_xyf14 小时前
Python 异常处理
前端·后端·python
科研online14 小时前
基于多源数据和XGBoost-SHAP分析中国大陆绿地碳汇空间变异影响因素的非线性相关性与尺度差异
算法·学习方法
麻雀飞吧14 小时前
期货多合约策略目标持仓怎么更新才不乱
python·区块链
Cthy_hy14 小时前
拓扑排序超详解:原理 + Kahn 贪心算法
python·算法·贪心算法