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

相关推荐
JAVA学习通20 小时前
北京明光云振铎数据科技Java面经
java·开发语言·科技
贫民窟的勇敢爷们1 天前
SpringBoot整合AOP切面编程实战,实现日志统一记录+接口权限校验
java·spring boot·spring
曦月逸霜1 天前
啥是RAG 它能干什么?
人工智能·python·机器学习
浅念-1 天前
递归解题指南:LeetCode经典题全解析
数据结构·算法·leetcode·职场和发展·排序算法·深度优先·递归
2301_769340671 天前
如何在 Vuetify 中可靠捕获 Chip 关闭事件(包括键盘触发).txt
jvm·数据库·python
Kiling_07041 天前
Java集合进阶:Set与Collections详解
算法·哈希算法
AC赳赳老秦1 天前
供应链专员提效:OpenClaw自动跟踪物流信息、更新库存数据,异常自动提醒
java·大数据·服务器·数据库·人工智能·自动化·openclaw
迈巴赫车主1 天前
Java基础:list、set、map一遍过
java·开发语言
智者知已应修善业1 天前
【51单片机89C51及74LS273、74LS244组成】2022-5-28
c++·经验分享·笔记·算法·51单片机
灵犀学长1 天前
基于 Spring ThreadPoolTaskScheduler + CronTrigger 实现的动态定时任务调度系统
java·数据库·spring