У меня есть переменное количество элементов, которые я хочу распространять на переменное количество часов. Проблема, с которой я сталкиваюсь, заключается в том, как распределить остаток, чтобы пространство между «свесом» было как можно более равным. Например, если у меня есть 13 пунктов (X) распространения через 5 часов я хочу закончить сРаспространение количества позиций в равном количестве часов
Hours: 1 2 3 4 5
---------------------------------
x x x x x
x x x x x
x x x
Я не уверен, если я overthinking это. В настоящее время я проверяю, больше ли количество элементов, чем количество часов. Если это правда, я разделяю (количество элементов/количество часов). Затем я думаю, что мне нужно разделить (количество часов/остаток) ... Но для приведенного выше примера: 5/3 = 1,6, который округляется до 2. Я думаю, что я должен использовать Math.Floor
как-то, но я сейчас не совсем уверен, как.
В течение 4 элементов через 5 часов, я хотел бы в конечном итоге с Xs 2 предметов с Ys Для 1 пункта с Zs
1 2 3 4 5
------------------------
x x x x
y y
z
Число элементов и числом часы являются переменными.
Хорошо, я думаю, что сейчас я на правильном пути. Теперь я пытаюсь разбить ящики пополам и положить один из остатков в центр-бункер. Это повторяется рекурсивно, пока остаток не равен 0.
Постарайтесь найти точное определение того, как вы хотите разделять предметы: пытаетесь ли вы максимизировать расстояние между пунктами? Максимальное расстояние между обоими предметами и краями? Кажется, вы пытаетесь сделать то и другое, но с весом к желанию разрыва в середине, а не по краям. –
На самом деле, я хочу свести к минимуму «подключенные» пустые места. Это также является причиной того, что Ys не по краям. Если бы они были по краям, пустое пространство занимало бы 3 подключенных слота, в отличие от 3 отдельных. – ChrisK
Ваша проблема кажется алгоритмом, а не тем, как реализовать его в технологии. Почему бы не попробовать эти сторонние сайты: http://math.stackexchange.com/ или http://mathoverflow.net/ –