线性扫描累加求和,再用总和除以个数得到平均值。
OJ: roj
题目 ID: 1061
难度:入门
标签:模拟入门
创建: 2026-07-06 10:30
更新: 2026-10-04 23:49
题目描述
读入 4 / 344 / 222 / 343 / 222,输出 1131 282.75000。
思路
顺序读入 total 累加;全部读完即得总和,再做 total / n 并按 %.5f 输出均值即可。
参考代码
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-07-06 10:30
# update_at: 2026-07-06 10:30
import sys
def solve() -> None:
data = map(int, sys.stdin.buffer.read().split())
n = next(data)
total = sum(data)
avg = total / n
print(f"{total} {avg:.5f}")
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-10-04 23:49
* update_at: 2026-10-04 23:49
*/
// main.cpp:读入 n 个整数,输出它们的和与均值(均值保留 5 位小数)。
#include <cstdio>
typedef long long ll;
int n; // 整数个数(题面 1 ≤ n ≤ 10000,int 足够)
double total; // 累加器;n·max(|a_i|) ≤ 1e8,double 精确表示无问题
double x; // 当前读入的整数
int main() {
// 读入 n,再循环 n 次累加
std::scanf("%d", &n);
for (int i = 0; i < n; ++i) {
std::scanf("%lf", &x);
total += x;
}
// 平均值 = 总和 / n;按题面要求保留 5 位小数
std::printf("%.0f %.5f\n", total, total / n);
return 0;
}