我正在编程,很有趣,我想取每n个元素的平均值。例如,我在向量中有1,000个元素,我想取每100个元素的平均值,如何使用c ++做到这一点。
我尝试使用模,但是我的逻辑不正确。
float av;
vector<float> average;
vector<int> vec = {1, 3, 5, 5, 6, 2, 12, 54};
for(int i = 0; i < vec.size(); i++) {
if(i % 2 == 0) {
av += vec[i];
average.push_back(av);
}
cout << average << endl;
}
我不断有所不同。例如,对于第一个平均值,我得到1;
答案 0 :(得分:0)
在循环中,您可以将i++
更改为i += 100
,然后对遇到的每个元素进行连续求和,并对所求和的元素数进行计数,然后返回总和除以计数即可得出平均值。
答案 1 :(得分:0)
很好的问题。这是我想到的一个简单解决方案。我用periodicity
表示要使用的矢量元素之间的步骤。然后,由于元素的数量可能不是周期性的整数倍,因此我使用了上限函数为该除法又获取了一个元素。
#include <iostream>
#include <vector>
#include <cmath>
int main()
{
int total = 0;
uint count;
float average;
const uint periodicity = 2;
std::vector<int> vec {1, 3, 5, 5, 6, 2, 12, 54, 18};
for (int i = 0; i < vec.size(); i = i + periodicity) {
total += vec[i];
}
count = ceil((double) vec.size()/periodicity);
average = (double) total / count;
std::cout << "sum: " << total << ", count: " << count
<< ", average: " << average << std::endl;
}
答案 2 :(得分:0)
平均值为(总和/元素数):(vec[0] + vec[1] + ... + vec[N - 1]) / N
第N个元素仅发生除法,每个数字的和为:
int N = 2;
for (int i = 0; i < vec.size(); i++)
{
av += vec[i];
if (i % N == 0)
{
average.push_back(av / N);
av = 0; // reset sum for next average
}
}