题目链接

成绩

题目描述

课程的总成绩由三部分构成:作业成绩(占20%)、小测成绩(占30%)和期末考试成绩(占50%)。计算公式为: 总成绩 = 作业成绩 * 0.2 + 小测成绩 * 0.3 + 期末考试成绩 * 0.5

输入描述: 输入三个非负整数,分别表示作业成绩、小测成绩和期末考试成绩。所有成绩都是 10 的整数倍。

输出描述: 输出一个整数,表示最终的总成绩。

解题思路

本题是一个简单的加权平均计算,解题步骤如下:

  1. 读取输入:从标准输入读取三个整数,分别代表作业、小测和期末考试的成绩。
  2. 应用公式:直接套用题目中给出的加权公式 总成绩 = 作业 * 0.2 + 小测 * 0.3 + 期末 * 0.5
  3. 处理数据类型
    • 在计算时,由于权重是小数,编程语言会自动将整数成绩提升为浮点数进行乘法运算,得到的结果也是浮点数。
    • 题目中有一个关键信息:"输入均为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))

算法及复杂度

  • 算法:加权平均计算。
  • 时间复杂度: - 仅涉及固定的几次算术运算。
  • 空间复杂度: - 仅需常数空间存储变量。