小U的奖学金申请问题
问题描述
小U是一位努力的学生,她正在申请奖学金。她修了门课程,每门课程有一个对应的学分,并取得了一个成绩。学校的奖学金评定要求是:小U所有课程的加权平均分不低于标准,并且所有课程的成绩都及格(即每门课的成绩不得低于分)。小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
问题解析
小U正在申请奖学金,她需要满足两个条件:
-
所有课程的加权平均分不低于标准X:
- 加权平均分是通过将每门课程的学分(
a列表中的值)与对应的成绩(b列表中的值)相乘,然后将这些乘积相加得到总分。 - 接着,将总分除以总学分(
a列表中所有值的和)来得到加权平均分。
- 加权平均分是通过将每门课程的学分(
-
所有课程的成绩都及格(即每门课的成绩不得低于60分) :
- 这意味着我们需要检查
b列表中的每个值是否都大于或等于60。
- 这意味着我们需要检查
为了解决这个问题,我们需要计算小U所有课程的加权平均分,并检查是否每门课程的成绩都不低于60分。加权平均分是通过将每门课程的学分与成绩相乘,然后将这些乘积相加,最后除以总学分来计算的。
代码解析
下面是solution函数的详细解析:
我们首先遍历成绩列表 b,检查是否有任何成绩低于60分。如果有,我们立即返回 False。然后,我们使用列表推导式和 zip 函数来计算加权总分和总学分。最后,我们计算加权平均分,并将其与标准 x 进行比较,以确定是否满足奖学金的申请条件。
def solution(n: int, x: int, a: list, b: list) -> bool:
# 首先,我们检查所有课程的成绩是否都及格
# 使用for循环遍历b列表中的每个成绩
for score in b:
# 如果发现任何成绩低于60分,立即返回False
if score < 60:
return False
# 如果所有成绩都及格,我们继续计算加权平均分
# 使用列表推导式和zip函数来计算加权总分
# zip(a, b)会将a和b列表中的元素一一对应起来,形成一个元组的列表
# ai * bi计算每门课程的加权分数,sum()函数将这些加权分数相加得到总分
total_weighted_score = sum(ai * bi for ai, bi in zip(a, b))
# 计算总学分,即a列表中所有元素的和
total_credits = sum(a)
# 计算加权平均分,即总分除以总学分
weighted_average = total_weighted_score / total_credits
# 最后,我们检查加权平均分是否不低于标准X
# 如果不低于,返回True;否则,返回False
return weighted_average >= x
测试样例解析
现在,让我们逐一解析测试样例:
-
样例1:
- 输入:
n = 4, x = 75, a = [4, 3, 2, 1], b = [80, 70, 90, 60] - 解析:所有成绩都及格,加权平均分 =
(4*80 + 3*70 + 2*90 + 1*60) / (4 + 3 + 2 + 1) = 76,不低于75,所以输出True。
- 输入:
-
样例2:
- 输入:
n = 3, x = 85, a = [3, 2, 5], b = [90, 85, 88] - 解析:所有成绩都及格,加权平均分 =
(3*90 + 2*85 + 5*88) / (3 + 2 + 5) = 86.5,不低于85,所以输出True。
- 输入:
-
样例3:
- 输入:
n = 5, x = 80, a = [2, 2, 3, 1, 4], b = [78, 80, 79, 85, 88] - 解析:所有成绩都及格,加权平均分 =
(2*78 + 2*80 + 3*79 + 1*85 + 4*88) / (2 + 2 + 3 + 1 + 4) = 81.625,不低于80,所以输出True。
- 输入:
-
样例4:
- 输入:
n = 6, x = 70, a = [4, 3, 2, 1, 2, 3], b = [60, 72, 65, 90, 85, 95] - 解析:所有成绩都及格(尽管有一门是60分,但也算及格),加权平均分 =
(4*60 + 3*72 + 2*65 + 1*90 + 2*85 + 3*95) / (4 + 3 + 2 + 1 + 2 + 3) = 76.875,不低于70,所以输出True。
- 输入:
-
样例5:
- 输入:
n = 4, x = 90, a = [2, 2, 2, 2], b = [89, 91, 92, 85] - 解析:所有成绩都及格,但加权平均分 =
(2*89 + 2*91 + 2*92 + 2*85) / (2 + 2 + 2 + 2) = 89.25,低于90,所以输出False。
- 输入: