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

相关推荐
IT利刃出鞘2 小时前
Java反射--PropertyDescriptor的使用
java·开发语言
2301_814809862 小时前
如何配置Oracle UTL_FILE目录_CREATE DIRECTORY语法与权限分配.txt
jvm·数据库·python
ghie90902 小时前
运用强跟踪无迹卡尔曼滤波来实现捷联惯导的初始对准
算法
遇见火星2 小时前
Firewalld 防火墙实战指南 + TCPWrapper 七层访问控制
开发语言·windows·python
dddaidai1232 小时前
LlamaIndex
python·ai·rag·llamaindex
m0_734949792 小时前
golang如何使用expvar暴露运行时指标_golang expvar运行时指标暴露步骤
jvm·数据库·python
菜菜的顾清寒2 小时前
力扣HOT100(21)相交链表
算法·leetcode·链表
所愿ღ2 小时前
SSM框架-Spring1
java·开发语言·笔记·spring
qq_413847402 小时前
开发者工具怎么看HTML_Elements面板使用指南【操作】
jvm·数据库·python