SWEA/[D2]

[C언어] SWEA 1984 중간 평균값 구하기

ruming 2022. 3. 1. 17:34

문제

10개 수를 입력 받아 최대 수와 최소 수를 제외한 나머지의 평균값을 출력한다.

소수점 첫째 자리에서 반올림한 정수

 

조건

각 수는 0이상 10,000이하의 정수

 

코드

#include <stdio.h>
#include <math.h>
int main(void) {
    int test_case, T;
    scanf("%d", &T);
    for (test_case = 1; test_case <= T; ++test_case)
    {
        int n[10] = { 0 };
        int min = 10000, max = 0;
        for (int i = 0; i < 10; i++) {
            scanf("%d", &n[i]);
        }
        //min, max
        for (int i = 0; i < 10; i++) {
            if (n[i] < min)  min = n[i];
            if (n[i] > max) max = n[i];
        }
        double avg = 0;
        for (int i = 0; i < 10; i++) {
            avg += n[i];
        }
        avg = avg - min - max;
        avg = avg / 8;
        printf("#%d %d\n", test_case, (int)(avg + 0.5));
    }
    return 0;
}

min과 max를 구해놓고, 배열의 전체 합에서 min과 max를 빼 평균을 구했다.

반올림 때문에 고민했는데, round로 소수점 한자리에서 반올림하려니까 잘 되지 않아서 double 값에 0.5를 더하고 int형으로 변환하는 방법을 사용했다. 이렇게 하면 소수점자리가 5보다 높을 때 올림이 되고 다운캐스팅으로 소수점은 버려진다.