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

2

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

Скажем, у меня есть машина для напитков, и у меня есть три пустых строки, которые могут быть заполнены Cola. У меня есть 17 банок Колы в руке, и я должен заполнять каждую строку по очереди.

Например...

Пасс 1:

Добавить Cola в строку 1. Drinks = 1
Добавить Cola в строку 2. Drinks = 1
Добавить Cola в строку 3. Drinks = 1

Pass 2:

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

...

Пасс 6

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

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

  • 2
    Ваше недосыпание удержало вас от постановки вопроса. Что ты пытаешься сделать?
  • 0
    Лол! Напиши код. :)
Показать ещё 2 комментария
Теги:
logic

3 ответа

4
Лучший ответ

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

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.
  • 0
    Вы знаете, это абсолютно правильно!
  • 0
    Благодарю за ваш ответ!
Показать ещё 1 комментарий
2

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

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

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

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].

Ещё вопросы

Сообщество Overcoder
Наверх
Меню