![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 27.11.2013
Сообщений: 5
|
![]()
Добрый день, помогите, пожалуйста, разобраться:
есть задача, она заключается в том, что есть некий лимит, допустим он равен 100, и есть несколько чисел, неизвестно, сколько, необходимо взять от этих чисел части в равных пропорциях так, чтобы в сумме они давали ровно тот лимит, который указан, при этом эти части должны быть выражены целыми числами и должны находиться в максимально равной пропорции как это сделать? понятное дело, что нужно сначала сложить все числа и лимит поделить на их сумму, так мы получим коэффициент пропорции, но после умножения чисел на этот коэффициент однозначно будут возникать знаки после запятой, и какие числа стоит округлять в большую сторону, а какие в меньшую - вопрос. Может есть какое-то правило, описывающее данную проблему? |
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
![]()
в порядке бреда - сортируем все полученные дробные числа (то, что Вы называете "части чисел") по убыванию дробной части
потом берём первое число из списка (у него максимальная дробная часть) и округляем в большую сторону, потом берём последнее число из списка (у него минимальная дробная часть) и округляем в меньшую сторону. потом берём второе сверху, потом второе снизу и т.д. Считаем сумму всех этих округлённых чисел. продолжаем процесс, пока не останется ОДНО число (либо середина списка, либо первое число от середины - в зависимости от того, нечетное или чётное число чисел было). Величину последнего числа принимаем как ЛИМИТ минус СуммаВсехРанееОкруглённых. на мой взгляд, это даст минимально возможную погрешность. p.s. для ускорения числа с нулевой дробной частью можно сразу исключить из обработки/округления. p.p.s. очевидно, что всё равно будут "плохие" случаи, когда потеря точности будет весьма значительна! Последний раз редактировалось Serge_Bliznykov; 14.05.2015 в 14:10. |
![]() |
![]() |
![]() |
#3 |
Новичок
Джуниор
Регистрация: 11.10.2011
Сообщений: 3,882
|
![]()
А можно пример?
|
![]() |
![]() |
![]() |
#4 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
![]()
мне тоже интересно посмотреть на пример!
но я покажу пример той задачи, которую я понял со слов ТС и попытался решить. Пусть дано лимит число 9. Пусть даны три числа 10, 15, 19 нужно от них взять части пропорционально этим числам так, чтобы сумма частей точно давала 9 Важно. Части - это целые числа. решение. находим сумму чисел = 44 пропорция 9/44 = 0,204545454545455 умножаем числа на пропорцию, получаем: получаем числа: 2,04545454545455 3,06818181818182 3,88636363636364 (кстати, Excel считает, что если эти три числа сложить, получится РОВНО 9.0000000000000) я предлагаю эти числа округлить так: 2 3 4 а теперь попробуйте то же самое сделать для тройки чисел 22, 22, 40 для тройки чисел 22, 22, 30 Последний раз редактировалось Serge_Bliznykov; 14.05.2015 в 16:47. |
![]() |
![]() |
![]() |
#5 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
![]()
А переходящий остаток, что бы не сортировать? Берем 1-ое число, не важно в какой последовательности, округляем, разницу между округленным и исходным прибавляем ко-второму, округляем и т.д. Так часто поступаю во всяких спецификациях. На счет максимально равной пропорции без понятия
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Последний раз редактировалось Аватар; 14.05.2015 в 18:34. |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Задача по подсчёту статистики использования букв. Другая задача - по длинной арифметике Pascal ABC | kimberly | Паскаль, Turbo Pascal, PascalABC.NET | 3 | 24.12.2012 17:03 |
задача на структуру(struct)/задача на работу с файлом | SevenArth | Помощь студентам | 0 | 26.04.2012 19:06 |
Задача на оптимальный расчет маршрута (задача в презентации) в табличном процессоре Excel | Toofed | Помощь студентам | 0 | 30.11.2011 01:12 |
Задача минимизации дисбаланса на линии сборки (задача минимакса) | LenZab | Microsoft Office Excel | 13 | 13.03.2011 22:51 |