把百分比权重写成整数权重,避免浮点误差后计算加权总分。
OJ: luogu
题目 ID: P3954
难度:入门
标签:python入门数学输入输出
日期: 2026-07-15 18:02
题意
输入作业成绩 A、小测成绩 B、期末成绩 C,总成绩按
思路
百分比可以直接换成整数权重:
题目保证三项成绩都是
brute.py 不适合这题,因为直接公式就是完整解法,没有搜索或优化过程。
Python 知识
a, b, c = map(int, input().split())一次读入三个整数。- 用
a * 2 + b * 3 + c * 5表示加权和。 // 10是整数除法;在本题保证下不会丢失有效小数。- 用整数运算表达百分比,通常比
0.2 * a这类浮点写法更稳。
对应的本地 Python 笔记:
/home/rainboy/mycode/hugo-blog/content/program_language/python/input_output_and_strings.md:多整数输入和基础输出。/home/rainboy/mycode/hugo-blog/content/program_language/python/math_tools.md:整数运算和浮点注意事项。/home/rainboy/mycode/hugo-blog/content/program_language/python/oj_input_output_cheatsheet.md:单个答案输出。
代码
python
a, b, c = map(int, input().split())
score = (a * 2 + b * 3 + c * 5) // 10
print(score, end="")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-07-27 00:00
* update_at: 2026-07-27 00:00
*/
#include <bits/stdc++.h>
using namespace std;
int main() {
int a, b, c; // 作业、小测、期末成绩
cin >> a >> b >> c;
// 将百分比权重转为整数:20%→2,30%→3,50%→5,总和除以 10
int score = (a * 2 + b * 3 + c * 5) / 10;
cout << score << endl;
return 0;
}Pythonic 写法
加权整除:
python
a, b, c = map(int, input().split())
print((a * 2 + b * 3 + c * 5) // 10, end='')复杂度
只做常数次整数运算,时间复杂度
总结
遇到百分比权重,如果比例能转成整数,优先使用整数表达式。这样代码更贴近题意,也能避免浮点格式和精度问题。