Как рассчитать процентное содержание одного элемента в сумме всех элементов в векторе <float> - PullRequest
1 голос
/ 30 октября 2019

У меня есть vector<float>a = {1,2,3,4,5,6,7,8,9}, и для каждого элемента я хочу получить процент от каждого значения в общей сумме. Это означает, что конечный результат должен быть примерно таким: vector<float>b = {2.2%,4.4%,6.6%,8.8,11.1%,13.3%,15.6%,17.8%,20%}

Размер массива не определен. Выше приведен только пример.

Ответы [ 2 ]

1 голос
/ 30 октября 2019

Сначала вам нужно вычислить итого или сумму:

float total = std::accumulate(a.begin(), a.end(), 0.0f);

Далее вам необходимо рассчитать процент каждого элемента:

const unsigned int quantity = a.size();
for (unsigned int i = 0; i < quantity; ++i)
{
  float percentage = (a[i] * 100.0f) / total;
  cout << percentage << ", ";
}
cout << endl;
0 голосов
/ 30 октября 2019

Сначала необходимо суммировать весь массив следующим образом:

float sum = 0;
for(size_t i =0; i<a.size(); i++) {
    // add to sum. I'll let you figure this part out
}

Затем, когда вы знаете sum, вам просто нужно снова выполнить цикл и разделить каждую переменную в векторе / массиве наsum. Я тоже позволю вам разобраться с этой частью.


Правка: На самом деле, я был неправ. Это даст вам вероятность, а не истинный процент. Если вам нужен процент, то вам нужно будет умножить на 100. Это преобразует такие вещи, как 0,05 в 5 (подразумевается%). Вы можете сделать это в том же цикле, что и исходное деление, выполнив что-то вроде этого:

percentage = (item / sum) * 100; // () not necessary here, I think, but just for clarity...
...