Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Số sinh viên đỗ tối đa sau khi cộng điểm thưởng không vượt 100 trong C++


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