Есть ли способ вычисления среднего/минимального/максимального числа всех чисел без использования массива? Необходимо вычислить до 10 000 номеров в секунду.Расчет минимального, максимального и среднего числа введенных номеров
ответ
Да,
Держите минимальную переменную, которая инициализируется до высокого значения, и обновлять его, если вы видите более низкое значение.
Сделайте противоположное с максимальной переменной.
Добавьте все числа и разделите эту сумму на общее количество, чтобы получить среднее значение.
Следующий код не делает ограничивающей проверки (например, число> 0, общее не переполнение), но должно дать вам идею:
int minimum = // Initialize to large #, in C# would be int.MaxValue
int maximum = // Initialize to most negative #, in C# would be int.MinValue
int count = 0;
int total = 0;
void StatsForNewNumber(int number)
{
if (number < minimum) minimum = number;
if (number > maximum) maximum = number;
count++;
total += number;
}
int Average()
{
return total/count;
}
как насчет переполнения всего? –
У вас будет такая же проблема с математикой с массивом. Проверьте наличие переполнений, если это возможно для данных вариантов использования. Используйте длинную или даже библиотеку, которая может управлять произвольно большими целыми числами, если это необходимо. Сумма также может быть выполнена в два раза, если приемлемые проблемы с удвоениями приемлемы. –
'long long' теперь стандартно, и почти у каждого его компилятора есть. Используйте это. –
Конечно. Держите наименьшее и наибольшее количество, которое вы получили, вместе с суммой и количеством чисел. Когда вам понадобится самый маленький или самый большой, верните его. Когда вам нужно среднее значение, разделите сумму на число.
Boost Accumulators включает в себя реализации всего вышеперечисленного, плюс немало других.
Как насчет переполнения всего? –
@ColinD: В значительной степени, как вы бы использовали массив, а это значит, что это зависит. Вы можете игнорировать его или использовать более крупный тип. Есть и другие способы, но нет особых оснований полагать, что они, в частности, могут применяться здесь. Я полагаю, что связанная библиотека Accumulators имеет код для устранения/предотвращения переполнения (но не помню точно). –
Абсолютно: все, что можно вычислить один пункт в то время, ,
Сохраните текущий минимум и текущий максимум, вычислите общее количество и счетчик. Когда вам нужно среднее значение, разделите общее количество на счет, и вы получите ответ.
class calc {
double minVal, maxVal, total;
int count;
public:
calc()
: minVal(numeric_limits<double>::max)
, maxVal(numeric_limits<double>::min)
, total(0)
, count(0) {
}
void process(double num) {
minVal = min(minVal, num);
maxVal = max(maxVal, num);
total += num;
count++;
}
double getAvg() {
// TODO: Check count to be > 0 here
return total/count;
}
double getMin() {
return minVal;
}
double getMax() {
return maxVal;
}
}
как насчет переполнения всего? –
@ColinD Учитывая, что OP запрашивает решение, которое заменяет основанное на массиве, оно не похоже на переполнение общего числа. – dasblinkenlight
Создайте четыре переменные: один для хранения MINVAL, один для MAXVAL, один на общую сумму, и один для приращения после каждого нового ввода. сравнивайте каждый новый вход с minVal и maxVal и обновляйте по мере необходимости. Добавьте входное значение к общей сумме, увеличивайте счетчик. Среднее значение всегда является общей суммой/счетчиком, поэтому вы можете запросить это значение на лету, если вам нужно или просто вычислить его в конце, когда закончите.
Он работает с большим количеством ценностей. Что происходит, когда общее количество переполнений? –
@ColinD: просто используйте int64_t (или длинный) для хранения всего и прочитайте ввод в ints, duh. – SigTerm
Вам не нужно хранить любые числа в массиве найти среднее/мин/макс, так как вы перебором номеров вы делаете
if(currentSmallest > currentNumber)
currentSmallest = currentNumber
if(currentLargest < currentNumber)
currentLargest = currentNumber
и кроме того, вы будете держать счетчик и общая сумма, и, разделив эти числа, вы получите среднее значение. Не нужно хранить их в массиве.
Как насчет переполнения всего? –
- 1. Быстрый расчет минимального, максимального и среднего числа входящих номеров
- 2. Расчет минимального/максимального/среднего ответа ping
- 3. C программирование Поиск минимального, максимального и среднего
- 4. расчет минимального и максимального количества пользовательских входов
- 5. Борьба для вычисления среднего, минимального и максимального значений в java
- 6. Как написать программу для получения минимального, максимального и среднего значения
- 7. Расчет среднего числа по строкам
- 8. Вычисление минимального, максимального и среднего содержания списка в Python
- 9. Попытка модуляции методов для среднего, минимального и максимального
- 10. поиск минимального, максимального и среднего значений с другим типом символов
- 11. Получение среднего, минимального и максимального чисел в 2D-массиве
- 12. Расчет среднего числа последовательных чисел в C#
- 13. Расчет минимального и максимального периодов времени в таблице
- 14. Поиск среднего числа n номеров в списке
- 15. java Расчет среднего значения
- 16. Поиск минимального и максимального числа между целыми числами
- 17. Как найти точное местоположение максимального и минимального числа в матрице
- 18. получение минимального и максимального даты
- 19. Поиск максимального и минимального времени
- 20. Поиск минимального и максимального эффективного
- 21. MySQL Расчет среднего числа столбцов с псевдонимом
- 22. Расчет среднего числа столбцов в SQL
- 23. Propel ORM: Расчет среднего числа столбцов
- 24. Расчет среднего числа матриц в R
- 25. Расчет среднего числа чисел без обратной передачи
- 26. Расчет среднего числа поплавков, округленных до целого числа NASM
- 27. Расчет среднего?
- 28. Расчет среднего
- 29. Расчет среднего значения конкретных значений
- 30. Расчет максимального значения поплавка
Пожалуйста, добавьте тег домашней работы, если это необходимо. – thb
Я вижу ряд решений, в которых упоминается общая сумма всех чисел. Может ли это вызвать переполнение? –
@ColinD: Чтобы получить среднее значение для серии, вы должны добавить ее в какой-то момент. –