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