C언어 문제풀이
SWEA 1984번: 중간 평균값 구하기 (D2)
지식보부상님
2023. 11. 12. 01:06
10개의 수를 입력 받아, 최대 수와 최소 수를 제외한 나머지의 평균값을 출력하는 프로그램을 작성하라. (소수점 첫째 자리에서 반올림한 정수를 출력한다.) [제약 사항] 각 수는 0 이상 10000 이하의 정수이다. [입력] 가장 첫 줄에는 테스트 케이스의 개수 T가 주어지고, 그 아래로 각 테스트 케이스가 주어진다. 각 테스트 케이스의 첫 번째 줄에는 10개의 수가 주어진다. [출력] 출력의 각 줄은 '#t'로 시작하고, 공백을 한 칸 둔 다음 정답을 출력한다. (t는 테스트 케이스의 번호를 의미하며 1부터 시작한다.) |
qsort를 이용하여 해결한 방법
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int compare(int *a, int *b) {
return *a > *b ? 1 : *a < *b ? -1 : 0;
}
int main() {
int tc, sum;
double avg;
int i , j;
int number[10];
scanf("%d", &tc);
for (i = 0; i < tc; i++) {
avg = 0;
sum = 0;
for (j = 0; j < 10; j++) {
scanf("%d", &number[j]);
}
qsort(number, 10, 4, compare);
for (j = 1; j < 9; j++) {
sum += number[j];
}
avg = (sum) / 8.0;
printf("#%d %.f\n", i + 1, avg);
}
return 0;
}
채점시 qsort 사용이 불가하므로, 각각 최대 / 최솟값을 찾아 해결한 경우
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main() {
int tc, sum, max, min;
double avg;
int i , j;
int number[10];
scanf("%d", &tc);
for (i = 0; i < tc; i++) {
sum = 0;
for (j = 0; j < 10; j++) {
scanf("%d", &number[j]);
}
max=number[0];
min=number[0];
for (j = 0; j < 10; j++) {
if (max < number[j]){
max = number[j];
}
if (min > number[j]){
min = number[j];
}
sum += number[j];
}
sum -= max;
sum -= min;
avg = (sum) / 8.0;
printf("#%d %.f\n", i + 1, avg);
}
return 0;
}