Здесь представлены все возможные комбинации без учёта порядка следования. Когда игрок делает первый ход, у него есть как минимум две стратегии, по которым он может получить число 15 (это следует из того, что каждое число встречается хотя бы 2 раза). При этом однозначно стратегия определяется вторым ходом (всегда найдётся ровно одна комбинация, содержащая два определённых числа).
Если игрок 2 (II) будет пытаться мешать игроку 1 (I), это приведёт к ничьей: пусть I выбрал некоторое число. Тогда II может ограничить выбор I. После второго хода I II забирает число, необходимое для получения 15. Тогда I делает то же самое (так как стратегия II определилась), оба проиграли. Этот исход получается, если I будет мешать II.
Если II не будет мешать I (и наоборот), это так же приведёт к ничьей, но с другим исходом — оба выиграют.
Так как из реализации на C++ можно узнать, что ответ 2107 - очевидно, ответ не помещается в 2 байта, поэтому будет хранить его в двух регистрах: R1 и R2, соответственно старшие и младшие байты.Сначала делим текущее значение числа k на 7 (команда DIV AB), если остаток нулевой, добавляем к младшим байтам текущее число и при наличии бита переноса увеличиваем старшие байты.После этого проверяем, не равно ли текущее значение двумстам, если это так - завершаем программу, иначе увеличиваем это значение и возвращаемся в начало "цикла".
В приложении смотри:
непосредственно код программы на Ассемблере (37783247.asm.txt),скриншот кода на Ассемблере и значения, хранящиеся в регистрах в результате выполнения,соответствующий код на плюсах и результат выполнения,на засыпку, результат конвертации числа 2107 из десятичной в 16-чную систему :)
игра сводится к ничьей
Объяснение:
Рассмотрим различные комбинации получения числа 15:
9 + 5 + 19 + 4 + 28 + 6 + 18 + 5 + 28 + 4 + 37 + 6 + 27 + 5 + 36 + 5 + 4Здесь представлены все возможные комбинации без учёта порядка следования. Когда игрок делает первый ход, у него есть как минимум две стратегии, по которым он может получить число 15 (это следует из того, что каждое число встречается хотя бы 2 раза). При этом однозначно стратегия определяется вторым ходом (всегда найдётся ровно одна комбинация, содержащая два определённых числа).
Если игрок 2 (II) будет пытаться мешать игроку 1 (I), это приведёт к ничьей: пусть I выбрал некоторое число. Тогда II может ограничить выбор I. После второго хода I II забирает число, необходимое для получения 15. Тогда I делает то же самое (так как стратегия II определилась), оба проиграли. Этот исход получается, если I будет мешать II.
Если II не будет мешать I (и наоборот), это так же приведёт к ничьей, но с другим исходом — оба выиграют.
Немного о полученном коде.
Так как из реализации на C++ можно узнать, что ответ 2107 - очевидно, ответ не помещается в 2 байта, поэтому будет хранить его в двух регистрах: R1 и R2, соответственно старшие и младшие байты.Сначала делим текущее значение числа k на 7 (команда DIV AB), если остаток нулевой, добавляем к младшим байтам текущее число и при наличии бита переноса увеличиваем старшие байты.После этого проверяем, не равно ли текущее значение двумстам, если это так - завершаем программу, иначе увеличиваем это значение и возвращаемся в начало "цикла".В приложении смотри:
непосредственно код программы на Ассемблере (37783247.asm.txt),скриншот кода на Ассемблере и значения, хранящиеся в регистрах в результате выполнения,соответствующий код на плюсах и результат выполнения,на засыпку, результат конвертации числа 2107 из десятичной в 16-чную систему :)