Внимание! Эта задача предоставлена в демонстрационном режиме.
Тесты в системе пока отсутствуют
В игру Ним играют двое. Имеется (2 ≤ N ≤ 100) кучек камней. Игроки по очереди берут камешки из кучек. Выигрывает тот, кто возьмет последний камешек. На каждом ходу игрок может брать камешки не более чем из K (1 ≤ K ≤ N) кучек, но обязан взять хотя бы один камешек. Вначале игры в каждой кучке 0 < H[i] < 1000000000 камней.
Задание. Напишите программу, которая будет играть в Ним и, по возможности, выигрывать.
Технические условия. Во время проверки к Вашей программе будет присоединен (linked) модуль проверки, который называется CHECK.* (PAS, C или CPP). Этот модуль содержит 3 функции: InitGame, JudgeTurn, PartTurn.
Функция InitGame используется для считывания входных данных из тестового файла. Она имеет 4 выходных параметра: N и K - количества кучек: массив Н - количества камней в кучках, First - кто первый ходит. После вызова этой функции N и K получат соответствующие значения, в первых N элементах массива Н будут количества камней в кучках, а First принимает значения 0, если первой ходит программа проверки (жюри) и 1, если первой ходит программа участника. Обратите внимание, что Ваша программа не должна самостоятельно читать входные данные, это нужно делать только с помощью функции InitGame.
Функцию JudgeTurn Ваша программа будет вызывать, когда ей нужно будет получить очередной ход жюри. Единственный выходной параметр этой функции - массив Т, первые N элементов которого содержат количества камешков, которые проверяющая программа берет из кучек. Соответствие хода условиям игры гарантируется.
Функцию PartTurn Ваша программа будет вызывать, чтобы сообщить проверяющей программе свой ход. Запишите свой ход в первые N элементов массива Т.
Каждая из этих функций возвращает 1, если все хорошо, или 0, если возникла ошибка, и Ваша программа может прекратить работу.
На полученной Вами дискете будет модуль проверки (CHECK.*) и главный модуль (NIM_KBD.*). Они предоставляются только для того, чтобы Вы могли быстро начать работу над решением, не теряя время на технические проблемы. Модуль CHECK выполняет считывание данных с клавиатуры, проверку ходов участника и последовательности вызовов функции, но очень плохо играет. Жюри при проверке будет использовать другой. Модуль NIM_KBD вызывает функции модуля CHECK в нужной последовательности, но вместо вычисления следующего хода участника читает его с клавиатуры. Ваша задача и состоит в том, чтобы функция MakeTurn вычисляла следующий ход. Жюри не настаивает на использовании указанных файлов, но Ваше решение должно корректно взаимодействовать с модулем CHECK.
Примечание. При проверке среди тестов будут такие частные случаи:
1) N=2, K=1; 2) N=3, K=1; 2) N > 3, K=1.
Программа- решение - NIM.PAS, NIM.CPP, NIM.C.
Пример
N=4, K=2, First=1, H=(3,4,5,6).
Участник: (1,1,0,0), осталось (2,3,5,6)
Жюри: (0,0,1,1), осталось (2,3,4,5)
Участник: (0,0,1,1), осталось (2,3,3,4)
Жюри: (1,1,0,0), осталось (1,2,3,4)
Участник: (0,0,0,4), осталось (1,2,3,0)
Жюри: (0,0,1,0), осталось (1,2,2,0)
Участник: (1,2,0,0), осталось (0,0,2,0)
Жюри: (0,0,2,0), осталось (0,0,0,0)
Выиграло жюри (но участник имел шанс!!!)