이 문제에서 우리는 클래스의 학생 점수를 나타내는 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