Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

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