Круглый Робин в C # - PullRequest
       9

Круглый Робин в C #

2 голосов
/ 09 августа 2009

У меня проблема (возможно, из-за недостатка сна!), Где я пытаюсь решить математическую задачу в C #.

Допустим, у меня есть автомат для напитков, и у меня есть три пустых ряда, которые можно заполнить колой. У меня в руке 17 банок колы, и я должен заполнять каждый ряд по одной за раз.

Например ...

Пропуск 1:

Добавить колу в строку 1. Напитки = 1
Добавьте колу в строку 2. Напитки = 1
Добавьте колу в строку 3. Напитки = 1

Пропуск 2:

Добавить колу в строку 1. Напитки = 2
Добавьте колу в строку 2. Напитки = 2
Добавьте колу в ряд 3. Напитки = 2

...

Пропуск 6

Добавить колу в строку 1. Напитки = 6
Добавьте колу в строку 2. Напитки = 6
Добавьте колу в ряд 3. Напитки = 5 (в этот момент больше не осталось напитков)

По какой-то причине я полностью потерян. Кто-нибудь может помочь?!

Ответы [ 3 ]

5 голосов
/ 09 августа 2009

Довольно быстро и безболезненно и требует только одного цикла, а не двух вложенных циклов. Все, что вам нужно, это немного математики, чтобы получить правильный индекс массива:

int[] Cola = {0,0,0};
int Rows = Cola.Length;
int Drinks = 17;

for (int i = Drinks; i > 0; i--)
{
   Cola[(Drinks - i) % Rows]++;
}

Console.WriteLine("Row 1 has " + Cola[0] + " cans.");
Console.WriteLine("Row 2 has " + Cola[1] + " cans.");
Console.WriteLine("Row 3 has " + Cola[2] + " cans.");

Это приводит к выводу:

Row 1 has 6 cans.
Row 2 has 6 cans.
Row 3 has 5 cans.
2 голосов
/ 09 августа 2009

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

int cans = 17;
cans += machine.Rows.Count;
for(int i = 1; i <= machine.Rows.Count; i++) {
   Console.WriteLine("Row {0} has {1} cans.", i, --cans / machine.Rows.Count);
}
1 голос
/ 09 августа 2009

Съемка с бедра:

int numDrinks = /* Your constant here */
int[] drinksInRow = new int[NUM_ROWS];
for(int i = 0; i < drinksInRow.Length; i++)
{
  drinksInRow[i] = numDrinks / NUM_ROWS;
  if(i < numDrinks % NUM_ROWS) drinksInRow[i]++;
}

Количество напитков в каждом ряду в drinksInRow, индексируется по номеру строки, начиная с 0.

Это быстрее, чем делать повторные проходы; в основном это O (NUM_ROWS) [если вы играете действительно проигрыш с Big-O].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...