Иногда неправильный вывод при моделировании очереди JavaJAVA

Программисты JAVA общаются здесь
Anonymous
Иногда неправильный вывод при моделировании очереди Java

Сообщение Anonymous »

Описание проблемы:

У каждого человека в очереди есть билеты, которые нужно купить. Каждую секунду
  • Человек впереди покупает один билет.
  • Если ему все еще нужны билеты, он перемещается в конец очереди.

Нам нужно найти, сколько секунд понадобится человеку с индексом k, чтобы закончить покупку своего билеты.
Мой код:

Код: Выделить всё

public int timeRequiredToBuy(int[] tickets, int k) {
Queue queue = new LinkedList();
for (int i = 0; i < tickets.length; i++) {
queue.add(i);
}

int time = 0;
while (!queue.isEmpty()) {
int person = queue.poll();
if (!queue.isEmpty()) {
tickets[queue.peek()]--;
} else {
tickets[person]--;
}
time++;
if (tickets[person] > 0) {
queue.add(person);
}
if (person == k && tickets[person] == 0) {
break;
}
}

return time;
}

Код: Выделить всё

tickets =
[83,86,38,31,59,25,89,71,54,71,84]
k =1
Output
688
Expected
687
Почему эта логика приводит к получению значения, превышающего ожидаемое? Как мне правильно отслеживать билеты для каждого человека, не уменьшая случайно неправильный билет?


Подробнее здесь: https://stackoverflow.com/questions/798 ... simulation

Вернуться в «JAVA»