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
广告
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP