Консультация № 176741
17.02.2010, 22:46
0.00 руб.
0 3 1
Здравствуйте, эксперты.

Подскажите, как составить функцию:

Имеется: группа студентов.
У каждого студента — свои расходы.

Задача: основываясь на списке расходов, найти минимальную сумму денег, которая должна поменять хозяина, чтобы уравнять (с точность до 0,01) расходы всех студентов.

Пример:
3: 10.00; 20.00; 30.00: 10.00

4: 15.00; 15.01; 3.00; 3.01: 11.99

Студентов: 1 … 1000 [N]
Расходы: 0.01 … 10000.00 [R1, R2, ..., RN]

Обсуждение

давно
Мастер-Эксперт
17387
18346
19.02.2010, 20:10
общий
Иванов Андрей Владимирович:
Здравствуйте!

Полагаю, что вопрос более уместен для рассылки, связанной с вычислительными алгоритмами. А по Вашему примечанию к условию задачи возникает вопрос: "Разве во втором примере сумма 11,99 уравнивает расходы всех студентов?"

Предложенная Вами задача является учебной по какому-либо предмету или возникла на практике?

С уважением.
Об авторе:
Facta loquuntur.
Неизвестный
20.02.2010, 13:13
общий
>> Гордиенко Андрей Владимирович

Этот вопрос из книги "Задачи по программированию".

Но решил задать именно здесь, т. к. не могу найти принцип, по которому уравниваются расходы.
давно
Мастер-Эксперт
17387
18346
21.02.2010, 15:18
общий
это ответ
Здравствуйте, Иванов Андрей Владимирович.

Рассмотрим первый пример. Находим среднее арифметическое всех расходов:
(10,00 + 20,00 + 30,00)/3 = 20,00. Первый студент потратил на 20,00 – 10,00 = 10,00 (р.) меньше среднего арифметического, третий – на 30,00 – 20,00 = 10,00 (р.) больше среднего арифметического. Поэтому достаточно перенести 10,00 р. расходов третьего студента на расходы первого студента. Искомая сумма составляет, таким образом, 10,00 р.

Рассмотрим второй пример. Находим среднее арифметическое всех расходов:
(15,00 + 15,01 + 3,00 + 3,01)/4 = 9,005 ≈ 9,01 (р.). Первый студент потратил на 15,00 – 9,01 = 5,99 (р.) больше среднего арифметического, второй – на 15,01 – 9,01 = 6,00 (р.) больше среднего арифметического, третий – на 9,01 – 3,00 = 6,01 (р.) меньше среднего арифметического, четвертый – на 9,01 – 3,01 = 6,00 (р.) меньше среднего арифметического. Поэтому достаточно перенести 5,99 р. расходов первого студента на расходы четвертого студента и 6,00 р. расходов второго студента на расходы третьего студента. Искомая сумма составляет, таким образом, 5,99 + 6,00 = 11,99 (р.).

В общем случае схема решения задачи будет такой же. Для того чтобы сумма была действительно минимальной, ее следует принять равной меньшей из двух сумм: суммы расходов, больших среднего арифметического, и суммы расходов, меньших среднего арифметического. Так, в первом примере обе суммы и искомая сумма оказались равными 10,00 р., а во втором примере – равными соответственно 11,99 р., 12,01 р. и 11,99 р.

С уважением.
5
Об авторе:
Facta loquuntur.
Форма ответа