Два игрока играют в следующую игру. В начале игры они начинаются с n (1 < = n < = 100000) груды камней. На каждом шагу игры игрок выбирает кучу и удаляет по крайней мере один камень из этой кучи и перемещает ноль или больше камней из этой кучи в любую другую кучу, у которой все еще есть камни. Игрок проигрывает, если у него нет более возможных ходов. Учитывая начальные сваи, определите, кто победит: первый игрок или второй игрок, если оба играют отлично.Как найти игрока, которого победит
ответ
Сначала начните с анализа позиций с известным результатом - это будет случай, когда все камни находятся в одной куче. Тогда у вас нет другой кучи, по крайней мере, с одним камнем, поэтому вы не можете выполнить вторую часть движения (это предполагает, что даже когда вы перемещаете 0 камней, все равно должна быть другая непустая куча), так что это потеряет положение.
Теперь приступите к анализу, с каких позиций вы можете попасть в позиции потери. Это будет ваш первый раунд выигрышных позиций.
Первое наблюдение: поскольку движение касается только двух свай, очевидно, что вы можете добраться до позиции потери, только если у вас ровно две сваи. Если у вас есть только две сваи, вы всегда можете добраться до места потери, удалив все камни из одного из них и, таким образом, это выигрышная позиция.
Итак, теперь вам нужно подумать о том, какие позиции заставляют вас сделать ход, забрав вас в найденную выигрышную позицию. Они снова потеряют позиции (подсказка: я считаю, что это только тот случай, когда у вас есть 3 сваи по 1 камень каждый).
Продолжите этот путь, и в конце концов вы придумаете окончательное решение. Я не хочу решать всю проблему для вас, поскольку это не будет полезно для ваших навыков. Лучше придумать решение самостоятельно.
Надеюсь, это поможет.
ПРИМЕЧАНИЕ: если вам разрешено выполнять операции на одной непустой куче, т. Е. При перемещении нулевых камней вам не нужна другая непустая куча, тогда начальная позиция потери - это когда у вас нет камней, оставшихся на все и начальная позиция победы - это когда у вас есть только одна куча с любым количеством камней.
«переместите * ноль * или больше камней из этой кучи в любую другую кучу». Таким образом, множественные сваи с 1 камнем не являются проигрышной. –
Хм, я, должно быть, неправильно понял это - я думал, что это хотя бы один. Будет отредактировать мой пост соответственно –
Это вариант Nim. Понимание решения Nim должно помочь вам лучше понять эту игру.
Для Нима игра начинается с n
кучи камней. В свою очередь, каждый игрок выбирает одну кучу и удаляет по крайней мере один, возможно, больше камень из кучи. Игра заканчивается, когда осталось больше камней.
В приведенной выше статье Википедии есть хорошее объяснение стратегии выигрыша, которая включает в себя вычисление двоичной цифровой суммы размеров сваи. Прочитайте это, и вы сможете решить этот вариант.
- 1. Найти игрока в команде SQL
- 2. Как найти игрока, впервые зарегистрировавшегося в игре?
- 3. ошибка игрока 3 .js игрока
- 4. Modal Dialog vs Лайтбокс - кто победит?
- 5. Синхронный вызов jquery - Как подождать, пока победит jquery-метод?
- 6. Как ввести имя игрока?
- 7. Как добавить движение игрока
- 8. Как записать ответ игрока?
- 9. Как ограничить активность игрока?
- 10. Как переоценить инвентарь игрока
- 11. Как сделать игрока kaltura?
- 12. Как определить технологию объекта игрока?
- 13. Как использовать объекты рекордера/игрока
- 14. Замена UUID игрока на имя игрока
- 15. пауза игрока
- 16. Как найти в GSP, из которого вызывается действие контроллера?
- 17. Как найти идентификатор процесса cmd.exe, с которого запускается приложение?
- 18. Как найти пользователя, у которого нет установленного приложения?
- 19. Как найти файлы в каталоге, у которого нет расширений?
- 20. Как найти в DLL, процесс которого загрузил его?
- 21. Как найти имя сервера, с которого выполняется ваша страница asp.net?
- 22. Как найти PID процесса, имя которого я точно не знаю?
- 23. Как найти файл, имя которого я не знаю в Bash?
- 24. Как найти ключ массива, элементы которого соответствуют элементам другого массива
- 25. В R, как найти x, для которого f (x) = 0,5
- 26. Как найти .c для исполняемого файла, из которого он получен?
- 27. jQuery - Как найти следующего брата, у которого нет класса?
- 28. Как найти ключ/символ, на основе которого Regex соответствует?
- 29. Как найти каталог, из которого выполняется файл AutoIt?
- 30. Как найти сотрудника, которого нет постоянно более 10 дней?
помогите мне .... я пробовал этот вопрос много, но еще не смог найти правильный ответ –
Вы пробовали решить случай n = 2? Как насчет случая n = 3? –
Это известная проблема, известная как бобовая игра ... и восходит к много лет назад. Это был матч в Англии, который был решен. Вы будете искать в Google. Если вы не найдете решение этой проблемы, вы можете связаться со мной, чтобы помочь вам. –