こんにちは! mnbd(@mnbbbbbd)です。
AIZU ONLINE JUDGEの「ITP1_10_C 標準偏差」を解いてみましたので、その回答と解説をご紹介いたします。
プログラミング初心者なので、もっといい回答があるに違いありません。
あくまでも「動作はする」サンプルとしてご覧ください。
問題文
n 人の学生を含むクラスでプログラミングの試験を行った。それぞれの得点をs1, s2 … snとしたときの、標準偏差を求めるプログラムを作成せよ。
得点の平均値をmとすれば、分散α2は以下の式で得られる:
α2 = (∑ni=1(si – m)2)/n
分散の正の平方根が標準偏差αとなる。
Input
複数のデータセットが入力として与えられる。各データセットは以下の形式で与えられる:
学生の数n
S1 S2 ・・・ Snn が 0 のとき入力の終わりとする。
Output
各データセットに対して、標準偏差を1行に出力せよ。ただし、0.0001以下の誤差があってもよい。
Constraints
入力で与えられる n が1000を超えることはない。
0 ≤ si ≤ 100
https://onlinejudge.u-aizu.ac.jp/courses/lesson/2/ITP1/10/ITP1_10_C
解答
#include <bits/stdc++.h>
using namespace std;
int main() {
int n;
double ans[1000] = {};
int j = 0;
while(cin >> n) {
if(n == 0) {
break;
}
int s[n];
double m = 0;
for(int i = 0; i < n; i++) {
cin >> s[i];
m += s[i];
}
m /= n;
double tmp = 0;
for(int i = 0; i < n; i++) {
tmp += pow((s[i] - m), 2);
}
ans[j] = pow((tmp / n), 0.5);
j++;
}
for(int i = 0; i < j; i++) {
cout << fixed << setprecision(8) << ans[i] << endl;
}
return 0;
}
ハマったポイント
小数点の誤差が出てしまい、合格できず、その理由がわかりませんでした。
学んだこと
小数点を扱う場合、誤差が生じてしまうことがありますが、変数の型を丁寧に確認したいと思います。
まとめ
AIZU ONLINE JUDGEの「ITP1_10_D ミンコフスキー距離」を解いてみましたので、その回答と解説をご紹介いたしました。
少しずつですが、プログラミングの勉強をしています。
まだ初心者ですが、よかったらつながっていただけると嬉しいです。
Twitterアカウント(@mnbbbbbd)
以上です。
読んでいただきありがとうございました!