C++程序:给所有人发放奖金后,在不超过100分的条件下,最多有多少学生及格


在这个问题中,我们得到一个大小为n的数组stu[],表示班级里学生的成绩。每个学生的最高分是100分,学生需要50分才能通过考试。我们的任务是编写一个程序来查找在给所有人发放奖金并且不超过100分的情况下,最多有多少学生及格。

问题描述 − 我们需要给学生发放奖金分数以使其及格,但奖金分数将发放给所有学生。我们的任务是通过发放奖金分数来最大化及格的学生人数,但任何学生在发放奖金后不得超过100分。然后返回及格的学生的最大人数。

让我们举个例子来理解这个问题:

输入

stu[] = {45, 32, 78, 10, 53, 67}

输出

5

解释

All students passed are :
45 + 22 = 67
32 + 22 = 54
78 + 22 = 100
53 + 22 = 75
67 + 22 = 89

解决方案方法

为了解决这个问题,我们需要给学生分数,但需要考虑的一件事是任何学生的最高分都不应超过100分。因此,可以给予的最大奖金是

Student with max marks(M) + bonus = 100
Bonus = 100 − M

然后我们将此奖金添加到学生的当前分数中。如果超过50分,学生就及格了。结果将是所有此类学生的计数。

算法

初始化

passCount = 0;

步骤1

Find the student with maximum marks, maxMarks.

步骤2

Calculate bonus that can be given to all students, bonus = 100 − maxMarks.

步骤3

Loop for i −> 0 to n−1

步骤3.1

if(stu[i] + bonus >= 50), passCount++.

步骤4

return passCount.

示例

演示我们解决方案工作的程序:

 在线演示

#include<iostream>
using namespace std;
int calcPassCount(int stu[], int n) {
   int maxMarks = stu[0];
   for(int i = 1; i < n; i++){
      if(stu[i] > maxMarks)
      maxMarks = stu[i];
   }
   int bonusMarks = 100 − maxMarks;
   int passCount = 0;
   for(int i=0; i<n; i++) {
      if(stu[i] + bonusMarks >= 50)
      passCount ++;
   }
   return passCount;
}
int main() {
   int stu[] = {45, 32, 78, 10, 53, 67};
   int n = sizeof(stu)/sizeof(stu[0]);
   cout<<"The Maximum students to pass after giving bonus to everybody is "<<calcPassCount(stu, n);
   return 0;
}

输出

The Maximum students to pass after giving bonus to everybody is 5

更新于:2020年12月9日

浏览量:111

开启你的职业生涯

完成课程获得认证

开始学习
广告
© . All rights reserved.