如何获取C ++中每n个元素的平均值

时间:2019-04-13 22:31:26

标签: c++ vector

我正在编程,很有趣,我想取每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;

3 个答案:

答案 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
  }
}