문제 URL:
1546번: 평균
첫째 줄에 시험 본 과목의 개수 N이 주어진다. 이 값은 1000보다 작거나 같다. 둘째 줄에 세준이의 현재 성적이 주어진다. 이 값은 100보다 작거나 같은 음이 아닌 정수이고, 적어도 하나의 값은 0보
www.acmicpc.net
다음 문제는 기존 점수들 중 최댓값을 M이라고 하고, 모든 점수를 (점수)/M*100으로 고쳐주어
새로운 평균을 구하는 문제이다.
이 문제를 풀기 위해 먼저 동적 배열을 선언하여 점수를 입력받았다.
그 뒤 최댓값을 변수 m에 저장해두고, 배열의 각 요소에 저장된 점수들을 지정된 식에 맞추어 조작한 뒤 다시 배열에 대입해주었다.
결과적으로 필요한 결괏값은 새로운 점수들의 평균이기 때문에 배열의 모든 요소를 더해 배열의 크기만큼 나누어 주면 문제에서 요구하는 출력 결과가 나오게 된다.
여기서 이 문제의 조건으로 실제 정답과 출력값의 절대오차 또는 상대오차가 10^-2 이하이면 정답이라는 조건이 있기 때문에 새로운 점수를 입력받아야하는 동적 배열과, 새로운 점수들의 합을 저장하는 score변수를 실수형으로 선언해주어야했다.
#include<iostream>
using namespace std;
int main()
{
int n;
double score = 0;
cin >> n;
double* list = new double[n];
for(int i=0; i<n; i++)
cin >> list[i];
int m = list[0];
for(int i=0; i<n-1; i++)
if(m<list[i+1])
m = list[i+1];
for(int i=0; i<n; i++)
{
list[i] = list[i]/m*100.0;
score += list[i];
}
cout << score/n;
}