2013-08-01 6 views
0

У меня есть база данных пользователей (с присвоением номеров) и список элементов Excel, которые я успешно вытягиваю в два массива. Один массив пользователей, другой элемент из Excel (задачи). Я пытаюсь представить логику для представления этого сценария:Зацикливание вращения в ячейках Excel

Пользователь в БД может существовать с номером 0-5. В основном это показывает, сколько дней у них есть на неделе, и поможет раскрыть, сколько элементов в диапазоне Excel каждый человек может получить, чтобы правильно распределить позиции (до того, как я использовал логический индикатор, чтобы указать, чтобы включать или исключать) , Например:

User | Present # 
------------------- 
Jared | 0 'present daily 
John | 0 'present daily 
Mary | 1 'off 1 day 
Tom | 5 'off rotation entirely 

Вопрос: что это лучший способ, чтобы связать это с тем, сколько предметов они должны получать в целом?

я ожидал бы Jared и John, чтобы получить максимальную, Mary немного меньше, и Tom никогда не будет включен. Допустим, у меня 50 предметов.

Один из способов, который, как я думал, при циклировании имен в Excel, подсчитывается каждый раз, когда я начинаю назад в верхней части массива как «проход» (при назначении в ячейки Excel).

 Anyone with a 0 is never skipped through each pass 
    Anyone with a 1 is skipped every 4th pass 
    Anyone with a 2 is skipped every 3rd pass 
    Anyone with a 3 is skipped every 2nd pass 
    Anyone with a 4 is skipped every other pass 
    Anyone with a 5 is never included (easy)

Для моего примера, Jared и John всегда будет использоваться, Mary будет пропущен каждый четвертый проход, и Tom никогда не будет использоваться.

Имеет ли это смысл?
Каков наилучший способ поймать цикл через массив каждый N-й раз?
Я собираюсь сделать это правильно?

+1

вы можете объяснить, как вы добрались до: «5> 15, 5> 15, 4> 12"? Я понимаю об обратном и делении. –

+0

Если у вас всего 5 чисел, тогда я бы использовал вложенные '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' 'или' ' Затем просто соедините счетчик и сбросьте или выйдите, когда счетчик достигнет количества заданий. Здесь был бы эффективен цикл «While». Затем используйте 2D-массив с подобным (User, Loop #) и вычтите из Loop # каждый проход. Если Loop # = 0, добавьте задачу и установите Loop # в номер пользователя. – Grant

+1

@pnuts вы хотели бы предложить свой комментарий в качестве ответа? –

ответ

1

Чтобы избежать много циклов и задержек, которые могут возникнуть, я бы предложил рассчитать коэффициент спроса.
Существует 50 предметов (в примере), которые должны быть распределены в соответствии с доступностью. Доступность указана как 0 ежедневно, до 5, полностью вращая вращение, но с ними проще работать: «off rotation» не имеет ресурсов, поэтому 0 и «в настоящее время ежедневно» имеют все рабочие дни (?), поэтому 5.

Пользователь | Present # таблица стала бы тогда:

 
Jared 5 
John 5 
Mary 4 
Tom  0 
     14

Так 14 человеко-дней доступны для покрытия 50 пунктов, в среднем 3,57 пунктов на человек в день. Предполагая, что предмет не может быть разделен на 3 элемента на человека в день и на 8 больше. «3 каждый» может быть выделен за один проход путем умножения (пересмотренных) табличных значений на INT (item_total/table-total). Итак, для Джареда и Джона результат равен 5x3 = 15, а для Mary 4x3 = 12.

Это, хотя только для счетов 42, поэтому 8 еще не выделены. 3,3,2 «дополнительные» очевидны (в результате получается 18,18,14), но программирование это не так просто. Я бы предложил, где есть остатки от формулы INT, а затем использовать его результат +1 (то есть здесь 4, а не 3) принять предварительные результаты 20,20,16,0 (6 слишком много), а затем пропустить каждый пользователь, стуча 1 (по возможности) до тех пор, пока 6 не будут сбиты.

0

Это не совсем имеет смысла, так как вы, кажется, назначая еженедельные задания, по одному в день:

Любой человек с 0 никогда не пропускается через каждый пропуск

Любой человек с 1 пропускается каждый четвёртый проход

Любой человек с 2 пропускается каждые 3 прохода

Любой человек с 3 пропускается каждые 2 Пропустите

Любой человек с 4 пропускается каждый второй проход

Любой с 5 никогда не включен (легкий)

Однако, предполагая выше, вы пропускаете пользователей, когда их индивидуальные TaskAssignmentsAttempted Mod (6 - Present#) = 0.

Возможно, вам необходимо:

Любой человек с 0 никогда не пропускаются

Любой человек с 1 пропускается один раз в 5 проходит

Любой с 2 ​​пропускается дважды каждые 5 проходит

Любой, у кого есть 3, пропускается 3 раза каждые 5 проходов

Любой, у кого есть 4 пропускается 4 раза каждые 5 проходов

Любой, у кого есть 5, всегда пропускается.

Предположив выше, вы пропускаете пользователей, когда их индивидуальные 5 - Present# меньше, чем их индивидуальные TaskAssignmentsAttempted Mod 5.

С помощью любого из них вам необходимо отслеживать количество попыток (успешное или нет) каждого пользователя, а также фактических заданий.

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