rueki
백준 1546번 : 평균(C/C++) 본문
728x90
반응형
이 문제의 Point는 입력받은 과목에 대해 세준이만의 방법으로 점수를 어떻게 바꿔서 평균을 내는 지이다.
그러기 위해서는 제일 먼저 최대값을 구하고 '/M*100' 이라는 식을 적용시켜야 한다.
예시로 40, 80, 60 중에서 80점이 최고점수이다. 예제에서 식을 적용해보자
1. 40 / 80*100 = 50
2. 80 / 80*100 = 100
3. 60 / 80*100 = 75
4. Average = (50+100+75) / 3 = 75.00
위의 방식대로 값을 다 구해낼 수 있지만 중요한 점은 출력값이 소수점 두째자리까지 나와야한다는 것이다.
소스 코드를 보자
#include <iostream>
#include <cstdio>
#define _CRT_SECURE_NO_WARNINGS
using namespace std;
int main() {
int N;
double arr[1000];
double max = 0;
double sum = 0;
double avg = 0;
cin >> N;
for (int i = 0; i < N; i++) {
cin >> arr[i];
}
for(int i = 0; i<N;i++){
if (max < arr[i]) {
max = arr[i];
}
}
for (int i = 0; i < N; i++) {
arr[i] = (arr[i] / max * 100.0);
sum += arr[i];
}
cout << fixed;
cout.precision(2);
cout << sum / N << endl;
return 0;
}
과목 수 N을 제외하고 전부 실수형인 double로 선언해서 계산시에 따로 Type 변환을 하는 번거로움이 없게 하였고
cout<<fixed, cout.precision() 을 통해서 소수점 x자리까지 출력값 고정을 시킬 수가 있다.
그 외의 코드는 배열에 입력받기, 최대값을 찾기위한 비교 for문, 계산 순이다.
728x90
반응형
'C, C++ 문제풀이' 카테고리의 다른 글
백준 10809번 : 알파벳 찾기(C/C++) (0) | 2019.07.01 |
---|---|
백준 8958번 : OX퀴즈 (C/C++) (0) | 2019.06.30 |
백준 2577 : 숫자의 개수(C/C++) (0) | 2019.06.28 |
백준 2562번 : 최댓값(C/C++) (0) | 2019.06.28 |
백준 1110번 : 더하기 사이클(C/C++) (0) | 2019.06.28 |
Comments