Как взять среднее значение каждого n-го элемента в C ++ - PullRequest
2 голосов
/ 14 апреля 2019

Я программирую для удовольствия, и я хотел взять средние значения каждого n-го элемента. Например, у меня есть 1000 элементов в векторе, и я хочу взять среднее из каждых 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 голосов
/ 14 апреля 2019

Отличный вопрос.Вот простое решение, которое я придумал.Я использую 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;

}
0 голосов
/ 14 апреля 2019

Среднее значение равно (сумма / число_элементов) : (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
  }
}
0 голосов
/ 14 апреля 2019

В вашем цикле вы можете изменить i++ на i += 100, а затем сохранить текущую сумму каждого элемента, с которым вы столкнулись, а также счетчик количества суммированных вами элементов, а затем вернуть сумму, деленную нарассчитывать, чтобы получить среднее значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...