ในปัญหานี้ เราได้รับอาร์เรย์ stu[] ขนาด n แสดงคะแนนของนักเรียนในชั้น สำหรับนักเรียนแต่ละคน คะแนนสูงสุดคือ 100 และนักเรียนต้องการ 50 คะแนนเพื่อผ่านการสอบ ภารกิจของเราคือสร้างโปรแกรมเพื่อหาจำนวนนักเรียนสูงสุดที่ผ่านหลังให้คะแนนพิเศษทุกคนและไม่เกิน 100 คะแนน
คำอธิบายปัญหา
เราต้องให้คะแนนพิเศษแก่นักเรียนเพื่อให้ผ่านแต่วคะแนนพิเศษจะให้กับนักเรียนทุกคน ภารกิจของเราคือเพิ่มจำนวนนักเรียนที่สามารถผ่านการสอบได้โดยการให้คะแนนพิเศษ แต่นักเรียนคนไหนก็ตามไม่ควรได้คะแนนมากกว่า 100 หลังจากให้คะแนนพิเศษ และคืนค่าจำนวนนักเรียนที่ผ่านสูงสุด
ตัวอย่าง
อินพุต
stu[] = {45, 32, 78, 10, 53, 67}
เอาต์พุต
5
คำอธิบาย
นักเรียนที่ผ่านทั้งหมด:
45 + 22 = 67
32 + 22 = 54
78 + 22 = 100
53 + 22 = 75
67 + 22 = 89
แนวทางแก้ปัญหา
ในการแก้ปัญหา เราต้องให้คะแนนแก่นักเรียน แต่สิ่งหนึ่งที่ต้องพิจารณาคือคะแนนสูงสุดของนักเรียนคนไหนก็ตามไม่ควรเกิน 100 ดังนั้นคะแนนพิเศษสูงสุดที่สามารถให้ได้คือ
นักเรียนที่มีคะแนนสูงสุด(M) + คะแนนพิเศษ = 100
คะแนนพิเศษ = 100 - M
จากนั้นเราจะบวกคะแนนพิเศษนี้เข้ากับคะแนนปัจจุบันของนักเรียน หากเกิน 50 นักเรียนจะผ่าน ผลลัพธ์จะเป็นจำนวนนักเรียนทั้งหมดที่เป็นเช่นนั้น
อัลกอริทึม
เริ่มต้น
passCount = 0;
ขั้นตอนที่ 1
หานักเรียนที่มีคะแนนสูงสุด maxMarks
ขั้นตอนที่ 2
คำนวณคะแนนพิเศษที่สามารถให้กับนักเรียนทุกคน bonus = 100 - maxMarks
ขั้นตอนที่ 3
วนลูป i → 0 ถึง n-1
ขั้นตอนที่ 3.1
ถ้า (stu[i] + bonus >= 50), passCount++
ขั้นตอนที่ 4
คืนค่า 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= 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