回答編集履歴

5

コード修正、その他追記

2020/06/10 17:51

投稿

SHOMI
SHOMI

スコア4079

test CHANGED
@@ -80,7 +80,7 @@
80
80
 
81
81
  double sa = 0.0; //差
82
82
 
83
- double min = avg;
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

コメント修正

2020/06/10 17:51

投稿

SHOMI
SHOMI

スコア4079

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

文言修正

2020/06/10 17:43

投稿

SHOMI
SHOMI

スコア4079

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

コード修正

2020/06/10 17:42

投稿

SHOMI
SHOMI

スコア4079

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

コード追記

2020/06/10 17:41

投稿

SHOMI
SHOMI

スコア4079

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