본문 바로가기

프로그래밍/시스템

[C-알고리즘] 석차구하기

반응형

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
#define N 5
int main()
{
    srand(time(NULL));
    
    int grade[N];
    int rank[N];
    int i,j;
    
    for(i=0; i<N; i++) {
    grade[i] = rand() % 101// 점수 초기화 
    rank[i] = 1;    // 점수를 다른 사람과 비교하기 전에는 모두 1등일 가능성이 있으므로
                    // 석차배열을 1로 초기화한다. 
    }
    for(i=0; i<N; i++)
    {
        for(j=0; j<N; j++)   // i번보다 점수가 높은 사람이 있으면 i의 석차를 증가시킨다. 
        if( grade[i] < grade[j] ) rank[i]++;
    }
    
    // 석차를 오름차순으로 출력 
    for(i=0; i<N; i++
    for(j=0; j<N; j++)  
    if ( rank[j] == i+printf("성적 : %d -- %d등\n",grade[j],rank[j]);
        
}
cs

 

 (i+1) = 석차는 1부터 시작한다.

 

 석차를 내림차순으로 정렬(꼴찌부터 출력)하고 싶다면

 비교구문에 i+1대신 N-i를 비교한다.

 

비교하는 과정은

 

석차(rank)에서 1등(i+1)을 먼저 찾는다. 

 

찾은 1등의 석차에 대한 점수를 출력하고 

그 다음 2등을 찾는 이러한 로직이 반복된다.

 

석차를 매길 때

만약 공동3등이 나오면 다음 등수는 5등부터이다.

공동3등이 3명인 경우 다음 등수는 6등부터이다

 

 

 

 

 

 

 

반응형