题目链接
题目描述
课程的总成绩由三部分构成:作业成绩(占20%)、小测成绩(占30%)和期末考试成绩(占50%)。计算公式为:
总成绩 = 作业成绩 * 0.2 + 小测成绩 * 0.3 + 期末考试成绩 * 0.5
输入描述: 输入三个非负整数,分别表示作业成绩、小测成绩和期末考试成绩。所有成绩都是 10 的整数倍。
输出描述: 输出一个整数,表示最终的总成绩。
解题思路
本题是一个简单的加权平均计算,解题步骤如下:
- 读取输入:从标准输入读取三个整数,分别代表作业、小测和期末考试的成绩。
- 应用公式:直接套用题目中给出的加权公式
总成绩 = 作业 * 0.2 + 小测 * 0.3 + 期末 * 0.5
。 - 处理数据类型:
- 在计算时,由于权重是小数,编程语言会自动将整数成绩提升为浮点数进行乘法运算,得到的结果也是浮点数。
- 题目中有一个关键信息:"输入均为10的整数倍",这意味着
成绩 * 权重
的结果(例如70 * 0.2 = 14
)必然是一个整数。因此,最终加和的总成绩也一定是一个没有小数部分的浮点数(如83.0
)。 - 最后,只需将这个浮点数结果转换为整数类型输出即可。
代码
#include <iostream>
using namespace std;
int main() {
int score_hw, score_quiz, score_final;
// 读取三项成绩
cin >> score_hw >> score_quiz >> score_final;
// 计算加权总分
// C++ 会自动处理类型提升,计算结果为 double
// 将 double 结果赋值给 int 时会自动截断小数部分,符合题意
int total_score = score_hw * 0.2 + score_quiz * 0.3 + score_final * 0.5;
cout << total_score << endl;
return 0;
}
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// 读取三项成绩
int scoreHw = sc.nextInt();
int scoreQuiz = sc.nextInt();
int scoreFinal = sc.nextInt();
// 计算加权总分,结果为 double 类型
double totalScoreDouble = scoreHw * 0.2 + scoreQuiz * 0.3 + scoreFinal * 0.5;
// 将 double 结果转换为 int 输出
System.out.println((int)totalScoreDouble);
}
}
# 读取三项成绩
score_hw, score_quiz, score_final = map(int, input().split())
# 计算加权总分,结果为 float 类型
total_score_float = score_hw * 0.2 + score_quiz * 0.3 + score_final * 0.5
# 将 float 结果转换为 int 输出
print(int(total_score_float))
算法及复杂度
- 算法:加权平均计算。
- 时间复杂度:
- 仅涉及固定的几次算术运算。
- 空间复杂度:
- 仅需常数空间存储变量。