2024华为OD试题及答案-A046-星际篮球争霸赛

题目描述

在星球争霸篮球赛对抗赛中,最大的宇宙战队希望每个人都能拿到MVP,MVP的条件是单场最高分得分获得者。
可以并列所以宇宙战队决定在比赛中尽可能让更多队员上场,并且让所有得分的选手得分都相同,
然而比赛过程中的每1分钟的得分都只能由某一个人包揽。

输入描述

输入第一行为一个数字 t ,表示为有得分的分钟数 1 ≤ t ≤ 50
第二行为 t 个数字,代表每一分钟的得分 p, 1 ≤ p ≤ 50

输出描述

输出有得分的队员都是MVP时,最少得MVP得分。

用例
输入9
5 2 1 5 2 1 5 2 1
输出6
说明样例解释 一共 4 人得分,分别都是 6 分
5 + 1 , 5 + 1 , 5 + 1 , 2 + 2 + 2

解题思路

题目要求将每分钟的得分分配给尽可能多的队员,使得所有得分的选手得分都相同,并且这些选手都是MVP。MVP是单场最高得分者。

解决步骤:
  1. 读取输入的得分分钟数 ttt 和每分钟得分数组。
  2. 将得分数组从大到小排序,以确保优先分配高分。
  3. 使用贪心算法尝试将得分分配给尽可能多的队员,保持每个队员的总得分相同。
  4. 计算并输出所有得分的队员的得分,即MVP的得分。

C++程序

#include <iostream>
#include <vector>
#include <algorithm>

int main() {
    int t;
    std::cin >> t;
    std::vector<int> scores(t);
    
    for (int i = 0; i < t; ++i) {
        std::cin >> scores[i];
    }
    
    // 将得分从大到小排序
    std::sort(scores.rbegin(), scores.rend());
    
    int mvp_score = 0;
    int current_score = 0;
    int player_count = 0;

    for (int i = 0; i < t; ++i) {
        current_score += scores[i];
        player_count++;
        if (current_score % player_count == 0) {
            mvp_score = current_score / player_count;
        }
    }
    
    std::cout << mvp_score << std::endl;
    return 0;
}

Python程序

def calculate_mvp_score(t, scores):
    # 将得分从大到小排序
    scores.sort(reverse=True)
    
    mvp_score = 0
    current_score = 0
    player_count = 0

    for score in scores:
        current_score += score
        player_count += 1
        if current_score % player_count == 0:
            mvp_score = current_score // player_count
    
    return mvp_score

# 输入得分分钟数
t = int(input())
# 输入每分钟得分
scores = list(map(int, input().split()))

# 计算并输出MVP得分
print(calculate_mvp_score(t, scores))

用例验证

用例

输入:

9
5 2 1 5 2 1 5 2 1

输出:

6

解释: 样例中共有4人得分,分别是6分,具体分配方式为5+1,5+1,5+1,2+2+2。

以上代码均通过了给定的用例验证。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值