回答編集履歴
5
コード修正、その他追記
answer
CHANGED
@@ -39,7 +39,7 @@
|
|
39
39
|
{
|
40
40
|
double avg = average(values); //平均値
|
41
41
|
double sa = 0.0; //差
|
42
|
-
double min =
|
42
|
+
double min = std::numeric_limits<double>::max();
|
43
43
|
for (int v : values) { //平均値との差の絶対値
|
44
44
|
sa = std::fabs(avg - v); //絶対値
|
45
45
|
if (min > sa) {
|
@@ -55,4 +55,9 @@
|
|
55
55
|
}
|
56
56
|
return mini; //コンテナを返す
|
57
57
|
}
|
58
|
-
```
|
58
|
+
```
|
59
|
+
|
60
|
+
---
|
61
|
+
その他
|
62
|
+
- データ数0の場合が考慮されていませんね。
|
63
|
+
- 合計値は[std::accumulate](https://cpprefjp.github.io/reference/numeric/accumulate.html)で求められます。範囲for文の練習として書いたのかもしれませんが…
|
4
コメント修正
answer
CHANGED
@@ -49,7 +49,7 @@
|
|
49
49
|
std::vector<int> mini; //空のコンテナを作成
|
50
50
|
for (int again : values) { //もう一度平均値との差の絶対値を求める
|
51
51
|
sa = std::fabs(avg - again);
|
52
|
-
if (sa == min) { //saが最小値と一致するデータをコンテナに保存する
|
52
|
+
if (sa == min) { //saが平均値との差の絶対値の最小値と一致するデータをコンテナに保存する
|
53
53
|
mini.push_back(again);
|
54
54
|
}
|
55
55
|
}
|
3
文言修正
answer
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
```
|
5
5
|
`std::vector<int>`には`int`を代入する`operator=`は存在しないためエラーとなっています。
|
6
6
|
`mini.push_back(again);`
|
7
|
-
最も近い値と言いつつ、`vector`にしているのは同じ値が複数ある場合はすべて返したいということでよいでしょうか?
|
7
|
+
最も近い値と言いつつ、`vector`にしているのは平均値との差の絶対値が同じ値が複数ある場合はすべて返したいということでよいでしょうか?
|
8
8
|
|
9
9
|
---
|
10
10
|
```C++
|
2
コード修正
answer
CHANGED
@@ -46,7 +46,7 @@
|
|
46
46
|
min = sa;
|
47
47
|
}
|
48
48
|
}
|
49
|
-
std::vector<int> mini
|
49
|
+
std::vector<int> mini; //空のコンテナを作成
|
50
50
|
for (int again : values) { //もう一度平均値との差の絶対値を求める
|
51
51
|
sa = std::fabs(avg - again);
|
52
52
|
if (sa == min) { //saが最小値と一致するデータをコンテナに保存する
|
1
コード追記
answer
CHANGED
@@ -30,4 +30,29 @@
|
|
30
30
|
}
|
31
31
|
}
|
32
32
|
```
|
33
|
-
平均値と`values`の各要素との差と、`values`の最小値を比較しているので処理が間違っています。
|
33
|
+
平均値と`values`の各要素との差と、`values`の最小値を比較しているので処理が間違っています。
|
34
|
+
|
35
|
+
---
|
36
|
+
動くように直すならこうですかね。
|
37
|
+
```C++
|
38
|
+
std::vector<int> closet_to_average(std::vector<int>& values)
|
39
|
+
{
|
40
|
+
double avg = average(values); //平均値
|
41
|
+
double sa = 0.0; //差
|
42
|
+
double min = avg;
|
43
|
+
for (int v : values) { //平均値との差の絶対値
|
44
|
+
sa = std::fabs(avg - v); //絶対値
|
45
|
+
if (min > sa) {
|
46
|
+
min = sa;
|
47
|
+
}
|
48
|
+
}
|
49
|
+
std::vector<int> mini = {}; //空のコンテナを作成
|
50
|
+
for (int again : values) { //もう一度平均値との差の絶対値を求める
|
51
|
+
sa = std::fabs(avg - again);
|
52
|
+
if (sa == min) { //saが最小値と一致するデータをコンテナに保存する
|
53
|
+
mini.push_back(again);
|
54
|
+
}
|
55
|
+
}
|
56
|
+
return mini; //コンテナを返す
|
57
|
+
}
|
58
|
+
```
|