Mô tả bài toán
Cho mảng điểm của N sinh viên. Mỗi sinh viên được cộng cùng một số điểm thưởng, nhưng điểm không được vượt quá 100. Điểm đỗ là 50. Tìm số sinh viên đỗ tối đa.
Giải pháp (Tham lam)
- Tìm điểm cao nhất
max_mark. - Điểm thưởng tối đa có thể cộng =
100 - max_mark. - Đếm số sinh viên có
mark[i] + bonus ≥ 50.
Ví dụ minh họa
#include <iostream>
#include <algorithm>
using namespace std;
int check(int n, int marks[]) {
int* x = max_element(marks, marks + n);
int bonus = 100 - *x;
int c = 0;
for (int i = 0; i < n; i++)
if (marks[i] + bonus >= 50) c++;
return c;
}
int main() {
int n = 5;
int marks[] = {0, 21, 83, 45, 64};
cout << check(n, marks) << endl;
return 0;
}
Đầu ra
3