아무거나 내꺼 공부할래
[개념] 각 행의 가장 가까운 값 / c / 제한시간 없음 본문
▣ 입력설명
입력 예시과 같이 9 × 9 격자판에 쓰여진 81개의 자연수가 주어질 때, 각 행의 평균을 구하고, 그 평균과 가장 가까운 값을 출력하는 프로그램을 작성하세요. 평균은 소수점 첫 째 자리에서 반 올림합니다. 평균과 가까운 값이 두 개이면 그 중 큰 값을 출력하세요.
▣ 입력설명
- 첫 째 줄부터 아홉 번째 줄까지 한 줄에 아홉 개씩 자연수가 주어진다. 주어지는 자연수는 100보 다 작다.
▣ 출력설명
- 첫째 줄에 첫 번째 줄부터 각 줄에 각행의 평균과 그 행에서 평균과 가장 가까운 수를 출력한다.
▣ 입력 예시
3 23 85 34 17 74 25 52 65 10 7 39 42 88 52 14 72 63 87 42 18 78 53 45 18 84 53 34 28 64 85 12 16 75 36 55 21 77 45 35 28 75 90 76 1 25 87 65 15 28 11 37 28 74 65 27 75 41 7 89 78 64 39 47 47 70 45 23 65 3 41 44 87 13 82 38 50 12 48 29 80 |
▣ 출력 예시
42 34 43 42 53 53 45 36 50 45 41 37 54 64 43 44 49 50 |
<코드>
#pragma warning(disable:4996)
#include<stdio.h>
int main() {
int graph[9][9];
int i, j;
int avg;
int temp;
int min;
int sum;
int ans = 0;
for (i = 0; i < 9; i++) {
for (j = 0; j < 9; j++) {
scanf("%d", &graph[i][j]);
}
}
for (i = 0; i < 9; i++) {
sum = 0;
min = 100;
for (j = 0; j < 9; j++) {
sum = sum + graph[i][j];
}
avg = (sum / 9.0) + 0.5;
printf("%d ", avg);
for (j = 0; j < 9; j++) {
temp = abs(avg - graph[i][j]);
if (temp < min) {
min = temp;
ans = graph[i][j];
}
else if (temp == min && temp > graph[i][j]) temp = graph[i][j];
}
printf("%d\n", ans);
}
return 0;
}
핵심코드 : avg = (sum / 9.0) + 0.5;
반올림을 할때 ceil같은 함수를 쓰게되면 자료형이 복잡해진다. 그래서 실수형(9.0)으로 계산을 해주고 int형인 변수에 입력을 하면 결과는 자연스럽게 int형으로 저장된다.
'[c언어&c++] 알고리즘 공부 > 개념' 카테고리의 다른 글
[개념] 병합정렬 / c / 제한시간 없음 (0) | 2021.02.03 |
---|---|
[개념] K진수 출력(스택) / c / 제한시간 없음 (0) | 2021.02.01 |
[개념] 봉우리(2차원 배열 탐색) / c / 제한시간 없음 (0) | 2021.01.29 |
[개념] 이분검색 / c / 제한시간 없음 (0) | 2021.01.26 |
[개념] 삽입정렬 / c / 제한시간 없음 (0) | 2021.01.22 |