Иногда неправильный вывод при моделировании очереди 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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