week1-[分支结构]游戏

week1-[分支结构]游戏

题目描述

小 A、小 B 和小 C 在玩游戏。

一局游戏中,如果小 A 赢了那么他得 aaa 分,如果小 B 赢了那么他得 bbb 分,如果小 C 赢了那么他得 ccc 分。

共进行了 666 次游戏。问谁的得分最高?

输入格式

输入共 777 行。

111 行输入 333 个正整数 a,b,ca,b,ca,b,c

下面 666 行每行 111 个大写字母表示这一局游戏谁赢了。

输出格式

输出共 111111 个字符表示答案。

样例 #1

样例输入 #1

5 3 5
B
A
B
C
B
B

样例输出 #1

B

提示

样例解释 111

小 A 只赢了 111 次,得分为 555

小 B 赢了 444 次,得分为 3×4=123 \times 4 = 123×4=12

小 C 只赢了 111 次,得分为 555

数据范围

对于所有数据,1≤a,b,c≤1001 \leq a,b,c\leq 1001a,b,c100。保证只有一个人得分最高。

1. 阅读题目

  • 三个人 A、B、C 在玩 6 局游戏。
  • 如果某人赢了一局,就获得对应的分数:
    • A 赢一局得 a
    • B 赢一局得 b
    • C 赢一局得 c
  • 已知每局谁赢(用一个大写字母表示),计算 6 局后谁总分最高。
  • 保证只有一个人分数最高。

输入:

  1. 第一行:三个正整数 a,b,ca, b, ca,b,c。
  2. 接下来 6 行:每行一个 A / B / C

输出:

  • 一个字符,表示得分最高的人。

2. 分析问题

  • 本质是 计数统计 + 分数乘法
    1. 统计每个人赢了几局。
    2. 各自总分 = 胜场数 × 单场得分。
    3. 比较三人的总分,输出最大值对应的人。
  • 数据范围小(只有 6 局),不需要复杂数据结构,直接用整数统计。

3. 解决方案

  • 定义变量:

    int winA = 0, winB = 0, winC = 0; // 胜场计数
    
  • 读取每局胜者:

    • 如果是 AwinA++
    • 如果是 BwinB++
    • 如果是 CwinC++
  • 计算总分:

    int scoreA = winA * a;
    int scoreB = winB * b;
    int scoreC = winC * c;
    
  • 比较三者大小,输出最大值对应的字母。


4. C++ 代码实现

#include <bits/stdc++.h>
using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int a, b, c;
    cin >> a >> b >> c;
    int winA = 0, winB = 0, winC = 0;

    for (int i = 0; i < 6; i++) {
        char ch;
        cin >> ch;
        if (ch == 'A') winA++;
        else if (ch == 'B') winB++;
        else if (ch == 'C') winC++;
    }

    int scoreA = winA * a;
    int scoreB = winB * b;
    int scoreC = winC * c;

    if (scoreA > scoreB && scoreA > scoreC) cout << 'A';
    else if (scoreB > scoreA && scoreB > scoreC) cout << 'B';
    else cout << 'C';

    return 0;
}

5. 数据测试

样例 1

输入:

5 3 5
B
A
B
C
B
B

过程:

  • winA = 1, winB = 4, winC = 1
  • scoreA = 1×5 = 5
    scoreB = 4×3 = 12
    scoreC = 1×5 = 5
  • B 最大 → 输出 B

输出:

B

与题目样例一致 ✅


自测边界

测试 1
10 1 1
A
A
A
A
A
A

全是 A 赢 → scoreA=60,scoreB=0,scoreC=0 → 输出 A

测试 2
1 100 1
B
B
B
B
B
B

全是 B 赢 → 输出 B


6. 时间复杂度和空间复杂度分析

  • 时间复杂度:
    读取和统计 6 局比赛 → O(6)=O(1)

    空间复杂度:
    仅用几个整型变量 → O(1)


7. 提出优化方案

  • 由于数据范围极小,这个题目已经是最优解法,没有算法上的优化空间。
  • 可扩展优化:
    • 如果比赛局数很大,可以用 map<char,int> 统计胜场,代码更简洁。
    • 如果要扩展到更多玩家,可用数组 score[3] 存储总分,避免多重 if
    • 如果有平局情况,需额外处理(本题不需要,因为保证唯一最大值)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

汤永红

一分也是爱

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值