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

相关推荐
Escalating_xu8 分钟前
【Linux 网络编程】五种 I/O 模型与非阻塞 I/O:从“等数据”到正确处理 EAGAIN
java·linux·网络
前端精髓28 分钟前
langchain 短期记忆(状态)动态运行时上下文
python·langchain
程序猿乐锅33 分钟前
万字详解Single-flight(单飞模式)
java·开发语言·分布式·后端·学习·single-flight
AiNightVision35 分钟前
无人机夜视模块如何选择?——从参数指标到系统集成的完整选型指南
人工智能·算法·计算机视觉·车载系统·无人机·视频·智能硬件
Java后端的Ai之路44 分钟前
【AIAgent开发】-Agent工具封装成CLI(纯干货!!!)
java·javascript·人工智能·agent·cli
AntsData1 小时前
用 12K+ 条亚马逊评论信号,定位机械键盘下一版该改什么
java·大数据·计算机外设
code2cat1 小时前
【随笔】连续批处理:长短请求怎样在迭代之间补位
java·人工智能·后端·大语言模型·vllm
最强小杰1 小时前
DeepSeek V4 Flash + Codex CLI 接入教程:原生 Responses API 适配,从配置到跑通收藏这篇就够了(2026)
java·前端·python·ai
牧羊人.3332 小时前
卷积神经网络之VGG
人工智能·深度学习·神经网络·算法·cnn
Flynn Liang2 小时前
Spring AI 2.0 深度解析:ChatClient、Advisor 链与 MCP——Java 工程师的 AI 落地最优解
java·人工智能·spring·大模型·架构设计·spring ai