小U的奖学金申请问题| 豆包MarsCode AI 刷题

32 阅读3分钟

问题描述

小U是一位努力的学生,她正在申请奖学金。她修了nn门课程,每门课程有一个对应的学分aiai​,并取得了一个成绩bibi​。学校的奖学金评定要求是:小U所有课程的加权平均分不低于标准XX,并且所有课程的成绩都及格(即每门课的成绩不得低于6060分)。小U想知道她是否满足奖学金的申请条件。

测试样例

样例1:

输入:n = 4, x = 75, a = [4, 3, 2, 1], b = [80, 70, 90, 60]
输出:True

样例2:

输入:n = 3, x = 85, a = [3, 2, 5], b = [90, 85, 88]
输出:True

样例3:

输入:n = 5, x = 80, a = [2, 2, 3, 1, 4], b = [78, 80, 79, 85, 88]
输出:True

样例4:

输入:n = 6, x = 70, a = [4, 3, 2, 1, 2, 3], b = [60, 72, 65, 90, 85, 95]
输出:True

样例5:

输入:n = 4, x = 90, a = [2, 2, 2, 2], b = [89, 91, 92, 85]
输出:False

问题分析

需要实现一个函数 solution,该函数需要判断小U是否满足奖学金的申请条件。条件有两个:

  1. 所有课程的加权平均分不低于标准 X
  2. 所有课程的成绩都及格(即每门课的成绩不得低于 60 分)。

输入

  • n:课程数量。
  • x:奖学金评定的加权平均分标准。
  • a:一个包含n个整数的列表,表示每门课程的学分。
  • b:一个包含n个整数的列表,表示每门课程的成绩。

输出

  • 一个布尔值,表示小U是否满足奖学金的申请条件。

解题思路

  1. 计算加权平均分

    • 加权平均分的计算公式为:weighted_average = sum(a[i] * b[i] for i in range(n)) / sum(a)
    • 其中 a[i] 是第 i 门课的学分,b[i] 是第 i 门课的成绩。
  2. 检查所有成绩是否及格

    • 遍历所有课程的成绩 b,检查是否有任何一门课的成绩低于 60 分。
  3. 综合判断

    • 如果加权平均分不低于 X 且所有成绩都及格,则返回 True,否则返回 False

代码分析

  • 计算加权平均分
total_credits = sum(a)  # 计算所有课程的总学分
    weighted_sum = sum(a[i] * b[i] for i in range(n))  # 计算加权总和
    weighted_average = weighted_sum / total_credits  # 计算加权平均分
  • 检查所有成绩是否及格
all_grades_pass = all(grade >= 60 for grade in b)  # 检查所有成绩是否都大于等于60
  • 综合判断
if weighted_average >= x and all_grades_pass:  # 如果加权平均分不低于x且所有成绩都及格
        return True
    else:
        return False

完整代码演示

def solution(n: int, x: int, a: list, b: list) -> bool:

    total_credits = sum(a) 
    weighted_sum = sum(a[i] * b[i] for i in range(n))
    weighted_average = weighted_sum / total_credits 
    
    all_grades_pass = all(grade >= 60 for grade in b) 
    
    if weighted_average >= x and all_grades_pass: 
        return True
    else:
        return False

关键步骤解释

  1. 计算加权平均分

    • total_credits = sum(a):计算所有课程的总学分。
    • weighted_sum = sum(a[i] * b[i] for i in range(n)):计算加权总和。
    • weighted_average = weighted_sum / total_credits:计算加权平均分。
  2. 检查所有成绩是否及格

    • all_grades_pass = all(grade >= 60 for grade in b):检查所有成绩是否都大于等于 60
  3. 综合判断

    • if weighted_average >= x and all_grades_pass:如果加权平均分不低于 x 且所有成绩都及格,则返回 True,否则返回 False

总结