Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++로 첫 번째 학생보다 높은 점수를 받은 학생 수 구하기

n명의 학생이 각각 5개 과목에 대한 점수를 가지고 있다고 가정해 보겠습니다. 첫 번째 점수 집합은 Kamal의 것이며, 나머지 n-1개의 점수 집합은 다른 학생들의 것입니다. 이때 Kamal보다 총점이 더 높은 학생이 몇 명인지 구해야 합니다.

이 문제를 해결하기 위해 Student라는 클래스를 정의합니다. 이 클래스는 각 학생의 점수를 저장하며, input() 함수로 점수를 입력받고 calculateTotalScore() 함수로 5개 과목의 총점을 계산하는 역할을 담당합니다.

예를 들어 입력이 n = 4이고 scores = [[25,45,32,42,30], [22,25,41,18,21], [37,42,48,45,25], [36,48,35,40,30]]라고 한다면, 마지막 두 학생의 총점이 Kamal보다 높으므로 출력은 2가 됩니다.

문제 해결 접근 방법

이 문제는 다음 단계를 따라 해결할 수 있습니다.

  • s := Student 타입 객체 배열을 n개 요소로 생성

  • i := 0부터 시작해 i < n일 때까지 반복하며(반복마다 i를 1씩 증가):

    • scores[i]의 모든 점수를 s[i]에 저장

  • kamal_sc := s[0]의 총점 계산

  • count := 0으로 초기화

  • i := 1부터 시작해 i < n일 때까지 반복하며(반복마다 i를 1씩 증가):

    • total := s[i]의 총점 계산

    • 만약 total > kamal_sc라면:

      • (count를 1 증가)

  • count 반환

예제 코드

아래 구현 예제를 통해 더 잘 이해해 보겠습니다.

#include <iostream>
#include <vector>
using namespace std;
class Student{
    public:
     int score[5];
     void input(vector<int> v){
         for(int i = 0; i < 5; i++)
             score[i] = v[i];
     }
     int calculateTotalScore(){
         int res = 0;
         for(int i = 0; i < 5; i++)
             res += score[i];
         return res;
     }
};
int main(){
    int n = 4;
    vector<vector<int>> scores = {{25,45,32,42,30},{22,25,41,18,21},{37,42,48,45,25},{36,48,35,40,30}};
    Student *s = new Student[n];
    for(int i = 0; i < n; i++){
        s[i].input(scores[i]);
    }
    int kamal_sc = s[0].calculateTotalScore();
    int count = 0;
    for(int i = 1; i < n; i++){
        int total = s[i].calculateTotalScore();
        if(total > kamal_sc){
            count++;
        }
    }
    cout << count;
}

입력

4, {{25,45,32,42,30}, {22,25,41,18,21}, {37,42,48,45,25}, {36,48,35,40,30}}

출력

2