回答編集履歴
5
コード修正、その他追記
test
CHANGED
@@ -80,7 +80,7 @@
|
|
80
80
|
|
81
81
|
double sa = 0.0; //差
|
82
82
|
|
83
|
-
double min = a
|
83
|
+
double min = std::numeric_limits<double>::max();
|
84
84
|
|
85
85
|
for (int v : values) { //平均値との差の絶対値
|
86
86
|
|
@@ -113,3 +113,13 @@
|
|
113
113
|
}
|
114
114
|
|
115
115
|
```
|
116
|
+
|
117
|
+
|
118
|
+
|
119
|
+
---
|
120
|
+
|
121
|
+
その他
|
122
|
+
|
123
|
+
- データ数0の場合が考慮されていませんね。
|
124
|
+
|
125
|
+
- 合計値は[std::accumulate](https://cpprefjp.github.io/reference/numeric/accumulate.html)で求められます。範囲for文の練習として書いたのかもしれませんが…
|
4
コメント修正
test
CHANGED
@@ -100,7 +100,7 @@
|
|
100
100
|
|
101
101
|
sa = std::fabs(avg - again);
|
102
102
|
|
103
|
-
if (sa == min) { //saが最小値と一致するデータをコンテナに保存する
|
103
|
+
if (sa == min) { //saが平均値との差の絶対値の最小値と一致するデータをコンテナに保存する
|
104
104
|
|
105
105
|
mini.push_back(again);
|
106
106
|
|
3
文言修正
test
CHANGED
@@ -10,7 +10,7 @@
|
|
10
10
|
|
11
11
|
`mini.push_back(again);`
|
12
12
|
|
13
|
-
最も近い値と言いつつ、`vector`にしているのは同じ値が複数ある場合はすべて返したいということでよいでしょうか?
|
13
|
+
最も近い値と言いつつ、`vector`にしているのは平均値との差の絶対値が同じ値が複数ある場合はすべて返したいということでよいでしょうか?
|
14
14
|
|
15
15
|
|
16
16
|
|
2
コード修正
test
CHANGED
@@ -94,7 +94,7 @@
|
|
94
94
|
|
95
95
|
}
|
96
96
|
|
97
|
-
std::vector<int> mini
|
97
|
+
std::vector<int> mini; //空のコンテナを作成
|
98
98
|
|
99
99
|
for (int again : values) { //もう一度平均値との差の絶対値を求める
|
100
100
|
|
1
コード追記
test
CHANGED
@@ -63,3 +63,53 @@
|
|
63
63
|
```
|
64
64
|
|
65
65
|
平均値と`values`の各要素との差と、`values`の最小値を比較しているので処理が間違っています。
|
66
|
+
|
67
|
+
|
68
|
+
|
69
|
+
---
|
70
|
+
|
71
|
+
動くように直すならこうですかね。
|
72
|
+
|
73
|
+
```C++
|
74
|
+
|
75
|
+
std::vector<int> closet_to_average(std::vector<int>& values)
|
76
|
+
|
77
|
+
{
|
78
|
+
|
79
|
+
double avg = average(values); //平均値
|
80
|
+
|
81
|
+
double sa = 0.0; //差
|
82
|
+
|
83
|
+
double min = avg;
|
84
|
+
|
85
|
+
for (int v : values) { //平均値との差の絶対値
|
86
|
+
|
87
|
+
sa = std::fabs(avg - v); //絶対値
|
88
|
+
|
89
|
+
if (min > sa) {
|
90
|
+
|
91
|
+
min = sa;
|
92
|
+
|
93
|
+
}
|
94
|
+
|
95
|
+
}
|
96
|
+
|
97
|
+
std::vector<int> mini = {}; //空のコンテナを作成
|
98
|
+
|
99
|
+
for (int again : values) { //もう一度平均値との差の絶対値を求める
|
100
|
+
|
101
|
+
sa = std::fabs(avg - again);
|
102
|
+
|
103
|
+
if (sa == min) { //saが最小値と一致するデータをコンテナに保存する
|
104
|
+
|
105
|
+
mini.push_back(again);
|
106
|
+
|
107
|
+
}
|
108
|
+
|
109
|
+
}
|
110
|
+
|
111
|
+
return mini; //コンテナを返す
|
112
|
+
|
113
|
+
}
|
114
|
+
|
115
|
+
```
|