符号化試験|(c++)標準1546回:平均値


に質問


勢俊は期末試験に失敗した.勢俊は点数を偽造して家に持ち帰ることにした.まず勢俊は自分の点数の中で最高値を選んだ.この値をMと言います.そしてすべての点数を点数/M*100に変更しました.
例えば、ポテンシャル俊の最高点数が70で、数学点数が50であれば、数学点数は50/70*100で71.43点である.
上記の方法で勢俊の成績を再計算する場合は、新しい平均値を求めるプログラムを作成してください.
質問の表示

🎹入力


1行目は試験科目の個数Nを与える.この値は1000以下です.2列目は勢俊の今の成績をあげた.この値は100以下の整数ではなく、少なくとも1つの値が0より大きい.

📢しゅつりょく


最初の行に新しい平均値を出力します.実際の正解と出力値の絶対誤差または相対誤差が10−2以下であることが正解である.

ほどく

#include <iostream>

using namespace std;

int main() {

	// 시험 본 과목의 개수 N을 입력받는다.
	int n;
	cin >> n;

	// N의 값이 1000보다 작거나 같다. 최대 경우의 배열 선언
	int arr[1000] = { 0 };
	int max = 0;
	double result = 0;

	// 둘째 줄에 현재 성적들을 입력받는다.
	for (int i = 0; i < n; i++)
	{
		cin >> arr[i];

		// 성적 중 제일 큰 점수를 구한다.
		if (max < arr[i]) 
			max = arr[i];
	}

	// 모든 점수를 "점수/M*100"으로 고친다.
	for (int i = 0; i < n; i++)
	{
		result += (double)arr[i] / (double)max * 100.l;
	}

	// 과목의 개수 N만큼 나누면 평균 값이 완성된다.
	cout << result / n;

	return 0;
}
最適化とメモリ管理を考慮し、動的な割り当てと一般化の方法を考慮すると、これは難しい考えだと思いますので、今回からもっと簡単な問題があるかどうか考え始めました.また,正解を当てて他の人のコードと比較することもよい学習となった.

参考資料とサイト(ありがとうございます)

  • https://www.acmicpc.net/problem/1546