读入每天的金、银、铜牌数,分别累加后输出三列之和与总奖牌数。
OJ: roj
题目 ID: 1064
难度:入门
标签:入门模拟数组
创建: 2026-09-29 16:58
更新: 2026-10-04 23:57
题目描述
输入第1行为天数n(1≤n≤17),其后n行每行3个整数为当天金、银、铜牌数;输出金、银、铜牌总数及总奖牌数。 输入样例:
text
3
1 0 3
3 1 0
0 3 0输出样例:4 4 3 11
思路
用三个计数器分别累加三列奖牌数,最后求和得到总奖牌数。
参考代码
Python 版:
python
#!/usr/bin/env python3
# Author by Rainboy blog: https://rainboylv.com github: https://github.com/rainboylvx
# rbook: -> https://rbook.roj.ac.cn https://rbook2.roj.ac.cn
# rainboy的学习导航网站: https://idx.roj.ac.cn
# create_at: 2026-09-29 16:58
# update_at: 2026-09-29 17:03
import sys
def solve() -> None:
data = iter(map(int, sys.stdin.buffer.read().split()))
days = next(data) # 参与决赛的天数 n,题面保证 1 <= n <= 17
# 每天固定 3 个整数,按题面顺序读成 n 个三元组,依次是金、银、铜。
rows = [[next(data), next(data), next(data)] for _ in range(days)]
# zip(*rows) 是矩阵转置:第 k 个元素恰好是第 k 列(某一种奖牌)的全部取值。
gold, silver, bronze = map(sum, zip(*rows))
print(gold, silver, bronze, gold + silver + bronze) # 第 4 个数是三列之和
if __name__ == "__main__":
solve()C++ 版(同一算法):
cpp
/**
* Author by Rainboy blog: https://rainboylv.com github: https://github.com/rainboylvx
* rbook: -> https://rbook.roj.ac.cn https://rbook2.roj.ac.cn
* rainboy的学习导航网站: https://idx.roj.ac.cn
* create_at: 2026-09-29 17:07
* update_at: 2026-10-04 23:57
*/
#include <cstdio>
#include <iostream>
using namespace std;
typedef long long ll;
ll n; // 参与决赛的天数
ll gold; // 金牌总数
ll silver; // 银牌总数
ll bronze; // 铜牌总数
int main() {
scanf("%lld", &n);
for (ll i = 0; i < n; i++) {
ll g, s, b;
scanf("%lld %lld %lld", &g, &s, &b);
gold += g;
silver += s;
bronze += b;
}
printf("%lld %lld %lld %lld\n", gold, silver, bronze, gold + silver + bronze);
return 0;
}