2009-11-17 5 views
1

У меня есть переменное количество элементов и диапазон переменных, который мне нужно распределить. Допустим, у меня есть 3 предмета, и я должен распространять их в течение 6 дней. Я бы хотел, чтобы каждый второй день имел элемент, и не имеет значения, имеет ли первый день какой-либо элемент или нет. Если бы у меня было 7 предметов в течение 6 дней, в один из дней было бы два предмета, неважно, в какой день.Равномерно распределять значения за период времени

К сожалению, я действительно сосать математику, поэтому у меня нет реальной идеи о том, как это сделать относительно красиво и красиво, или если это возможно. Вероятно, я мог бы это понять, но я надеюсь получить от него кое-что: P

Язык, использующий PHP.

+0

Является ли это домашнее задание? – Eineki

+0

Нет, это для приложения, которое я создаю, и моя математика терпит неудачу: P – Marco

ответ

6
//If you get the period between items: 
$period = $days/$items; 
//Then you can iterate through the items: 
for ($i = 0; $i < $items; $i++) 
{ 
    //and have a function that will add an item to the day number given as a parameter. 
    add_item_to_day_number(floor($i * $period)); 
} 
+0

обратите внимание, что $ days и $ items - это всего лишь количество дней и предметов. Я случайно набрал «days» вместо «items» в цикле for, но исправил это в редактировании. функция floor() просто удаляет любые десятичные знаки. – Oliver

0

(элементы в день i) = пол ((i + 1) * items/days) - пол (i * items/days), где i основано на 0.

5

По существу, вы выполняете деление и затем последовательно распределяете остаток. Так шаги идут что-то вроде этого:

  • подсчитывать количество дней
  • подсчитать количество элементов

  • если изделия> дней

    • делит число пунктов по Кол-во дней (дней в день) $ x
    • взять модуль элементов/день $ m (это остаток г)
    • цикла через дней размещения $ х пунктов на каждый день и 1 дополнительный пункт на первый $ м дней
  • если дней> пункты

    • делят число дней по количество позиций (дней за штуку) $ x
    • цикл в течение дней, наступающих на $ x , и размещение по 1 позиции в каждый день (сохранить след количества оставшихся вещей)
    • , когда вы приедете мимо последний день, если есть какие-либо предметы, оставленные, перебирает дни снова, начиная с day0 +-и пошаговыми $ х
+0

Я не уверен, какой из подходов работал бы лучше всего, но я пошел с этим, спасибо :) – Marco

+0

Подход Оливера более эффективен, так как он не требует двух разных методов. Это решение менее изящно, но, возможно, более понятно. – dnagirl

Смежные вопросы