@nyatmeat15

Разложить количество чеков по дням, алгоритм?

Здравствуйте, возможно задача глупая, но возник вопрос.
Есть суммарное количество чеков, например 800, и неделя.
С понедельника по среду работаем десять часов, в четверг и пятницу по 12, а в выходные по 4.
Можно посчитать среднее количество чека в час, и перемножить на часы в каждый день.
Но нужно чтобы было целое число в каждом дне.
Например остается после округлений 3 элемента. И как бы их разложить между наибольшими.
Пришли в голову жадные алгоритмы, но как-то решения так и не пришло.
Если только отсортировать по макс часам, и закидать по единичке в порядке убывания.
Хотелось бы например для случая например на верху будет 18 часов, а след за ним 12 часов, и логично бы было закинуть в 18 2 чека, а в 10 1 чек и прочие догадки
  • Вопрос задан
  • 117 просмотров
Решения вопроса 2
@magarif
Программист
Мне кажется как-то так:

1) Считаете количество часов в неделе
10 + 10 + 10 + 12 + 12 + 4 + 4 = 62
2) Делите с остатком ( в php смотреть знак %) количество чеков на количество часов
800 / 62 = 12 и остаток 56
3) Считаете отношение часов в днях от общей суммы
10 / 62 = 0,1613
12 / 62 = 0,1935
4 / 62 = 0,0645
4) По отношениям раскидываете остаток по дням
56 * 0,1613 = 9,03 (пн, вт, ср)
56 * 0,1935 = 10,84 (чт, пт)
56 * 0,0645 = 3,61 (сб, вс)
5) Откидываем целые по дням и исключаем эти дни
6) остатки складываем и повторяем пункт 4
Ответ написан
@kantenbors
Задача типовая.
Имеется типовое решение - расчет накопительным итогом:
Round(10/62*800)-Round(0/62*800)=129
Round((10+10)/62*800)-Round(10/62*800)=129
Round((10+10+10)/62*800)-Round((10+10)/62*800)=129
Round((10+10+10+12)/62*800)-Round((10+10+10)/62*800)=155
Round((10+10+10+12+12)/62*800)-Round((10+10+10+12)/62*800)=155
Round((10+10+10+12+12+4)/62*800)-Round((10+10+10+12+12)/62*800)=51
Round((10+10+10+12+12+4+4)/62*800)-Round((10+10+10+12+12+4)/62*800)=52
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
dimonchik2013
@dimonchik2013
купил глушилку сотовых: в маршрутках езжу в тишине
без формализации одним потоком сознания сложно

но 56 чеков, которые остаются после дележки 800 на 62 часа можете делить вполне по весам дней с округлением в нижнюю сторону - чтобы выходные не всегда получали добавленные
Ответ написан
@Zanak
Если вам действительно нужен ответ на ваш вопрос, то соберитесь, и попробуйте сформулировать его еще раз :)
Есть какое - то количество чеков, это понятно.
Есть график работы, это тоже понятно.

Можно посчитать среднее количество чека в час, и перемножить на часы в каждый день.
Но нужно чтобы было целое число в каждом дне.

Можно посчитать, а можно не считать. Что в итоге нужно? Оценить количество покупателей в разные моменты времени? Или правдоподобно раскидать количество чеков по дням?
Если приводите пример расчета, то будьте аккуратнее в его изложении. В исходных данных фигурируют цифры 4, 10 и 12 часов, откуда взялись 18?

Если говорить об идее с назначением весов дням, я попробовал бы так:
- посчитал веса в группе 10+10+10+4+4, и раскидал в их соответствии то, что осталось от группы 12+12
- далее распределил бы остатки от группы 10+10+10 по паре 4+4
- неделимый остаток от группы 4+4 (это от 0 до 3 чеков) просто отбросил бы
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
CSort Барнаул
от 40 000 до 90 000 руб.
Уралхим Пермь
от 150 000 руб.
AI Factory Санкт-Петербург
от 125 000 до 250 000 руб.
20 марта 2019, в 01:07
1000 руб./за проект
20 марта 2019, в 00:27
2000 руб./за проект
19 марта 2019, в 23:14
6000 руб./за проект