奥运奖牌计数

GitHub跳转原题关系图返回列表

读入每天的金、银、铜牌数,分别累加后输出三列之和与总奖牌数。

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;
}