質問するログイン新規登録

回答編集履歴

5

コード修正、その他追記

2020/06/10 17:51

投稿

SHOMI
SHOMI

スコア4079

answer CHANGED
@@ -39,7 +39,7 @@
39
39
  {
40
40
  double avg = average(values); //平均値
41
41
  double sa = 0.0; //差
42
- double min = avg;
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

コメント修正

2020/06/10 17:51

投稿

SHOMI
SHOMI

スコア4079

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

文言修正

2020/06/10 17:43

投稿

SHOMI
SHOMI

スコア4079

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

コード修正

2020/06/10 17:42

投稿

SHOMI
SHOMI

スコア4079

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

コード追記

2020/06/10 17:41

投稿

SHOMI
SHOMI

スコア4079

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
+ ```