ในปัญหานี้ เราได้รับอาร์เรย์ stu[] ขนาด n ซึ่งแสดงถึงเครื่องหมายของนักเรียนในชั้นเรียน สำหรับนักเรียนแต่ละคน คะแนนสูงสุดคือ 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