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