week1-[分支结构]游戏
题目描述
小 A、小 B 和小 C 在玩游戏。
一局游戏中,如果小 A 赢了那么他得 aaa 分,如果小 B 赢了那么他得 bbb 分,如果小 C 赢了那么他得 ccc 分。
共进行了 666 次游戏。问谁的得分最高?
输入格式
输入共 777 行。
第 111 行输入 333 个正整数 a,b,ca,b,ca,b,c。
下面 666 行每行 111 个大写字母表示这一局游戏谁赢了。
输出格式
输出共 111 行 111 个字符表示答案。
样例 #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 1001≤a,b,c≤100。保证只有一个人得分最高。
1. 阅读题目
- 三个人 A、B、C 在玩 6 局游戏。
- 如果某人赢了一局,就获得对应的分数:
- A 赢一局得
a
分 - B 赢一局得
b
分 - C 赢一局得
c
分
- A 赢一局得
- 已知每局谁赢(用一个大写字母表示),计算 6 局后谁总分最高。
- 保证只有一个人分数最高。
输入:
- 第一行:三个正整数 a,b,ca, b, ca,b,c。
- 接下来 6 行:每行一个
A
/B
/C
。
输出:
- 一个字符,表示得分最高的人。
2. 分析问题
- 本质是 计数统计 + 分数乘法:
- 统计每个人赢了几局。
- 各自总分 = 胜场数 × 单场得分。
- 比较三人的总分,输出最大值对应的人。
- 数据范围小(只有 6 局),不需要复杂数据结构,直接用整数统计。
3. 解决方案
-
定义变量:
int winA = 0, winB = 0, winC = 0; // 胜场计数
-
读取每局胜者:
- 如果是
A
,winA++
- 如果是
B
,winB++
- 如果是
C
,winC++
- 如果是
-
计算总分:
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
。 - 如果有平局情况,需额外处理(本题不需要,因为保证唯一最大值)。
- 如果比赛局数很大,可以用