Подскажите пожалуйста алгоритм на Javascript. Можно без кода [расчет возможности сдачи для людей с банкнотами 100, 50, 25 и ценой билета 25]

В кассах кинотеатра много людей, стоящих в огромной очереди. У каждого из них есть банкнота в 100, 50 или 25 долларов. Билет стоит 25 долларов. Вася в настоящее время работает клерком. Он хочет продать билет каждому человеку в этой очереди. Может ли Вася продать каждому билет и отдать сдачу, если у него изначально нет денег и он продает билеты строго в том порядке, в котором люди следуют в очереди?

Верните true, если Вася может продать каждому билет и отдать сдачу, в противном случае верните false.

Может ли Вася продать каждому билет и отдать сдачу?

Условия:

принимает массив из купюр(banknotesArray) номиналом 25, 50, 100.

возвращает(return) true если возможно выдать всем сдачу, или false если нет.

function isPossibleToGiveChange(banknotesArray) {

//Your code here

}

//Примеры вызова:

isPossibleToGiveChange([25, 25, 50]); // => true

isPossibleToGiveChange([25, 100]); // => false

isPossibleToGiveChange([25, 25, 50, 100]); // => true

isPossibleToGiveChange([25, 50, 100]); // => false

isPossibleToGiveChange([‘25’, ‘25’, ‘50’, ‘100’]); // => true

isPossibleToGiveChange([‘25’, ‘50’, ‘100’]); // => false

Прикольная задача. Я не смог “влет” придумать алгоритм решения. Но, но. Мы живем в удивительное время когда подобные вещи можно спрашивать у программ. Я спросил ИИ про алгоритм решения, и кажется, он должен работать. Вот ответ ИИ:

Для решения данной задачи можно использовать следующий алгоритм:

  1. Создать переменные cash25, cash50 и cash100, которые будут хранить количество имеющихся у Васи банкнот номиналом 25, 50 и 100 долларов соответственно. Изначально все эти переменные равны 0.
  2. Пройти по каждому человеку в очереди в порядке их следования.
  3. Для каждого человека проверить, какую банкноту он предъявляет в качестве оплаты билета. Для этого можно использовать условные операторы.
  4. Если предъявляемая банкнота имеет номинал 25, то добавить ее к переменной cash25.
  5. Если предъявляемая банкнота имеет номинал 50, то увеличить переменную cash50 и проверить, есть ли доступная сдача. Для этого можно вычесть из переменной cash25 одну банкноту номиналом 25.
  6. Если предъявляемая банкнота имеет номинал 100, то увеличить переменную cash100 и проверить доступность сдачи. Для этого можно сначала вычесть из переменной cash50 одну банкноту номиналом 50, а затем вычесть из переменной cash25 одну банкноту номиналом 25. Если сдачу можно выдать, то уменьшить соответствующие переменные на 1.
  7. Если в какой-то момент невозможно выдать сдачу, то ответить “NO” и завершить алгоритм.
  8. Если все люди в очереди успешно обслужены и сдача выдается каждому, то ответить “YES” и завершить алгоритм.
    Таким образом, данный алгоритм будет последовательно обрабатывать каждого человека в очереди и проверять возможность выдачи сдачи. Если в какой-то момент это невозможно, то ответ будет “NO”, иначе ответ будет “YES”.