ในปัญหานี้เรียกว่า เกม Nim เราได้รับจำนวนเต็มบวก N ซึ่งแสดงถึงกองหินและมีผู้เล่นสองคน 'playerA' และ 'playerB' . งานของเราคือสร้างโปรแกรมทำนายผู้ชนะเกม Nim
เกมของ NIM − เรามีก้อนหินมากมายและผู้เล่นสองคน 'playerA' และ 'playerB' . ผู้เล่นแต่ละคนสามารถเลือกหนึ่งร้านจากกองถ้า 'playerA' เริ่มหยิบหินก้อนหนึ่งจากกอง เราจำเป็นต้องทำนายผู้ชนะของเกม ผู้เล่นคนสุดท้ายที่เลือกหินจากกองเป็นผู้ชนะของเกม
มาดูตัวอย่างเพื่อทำความเข้าใจปัญหากัน
Input: N = 6 Output: playerB Explanation : Total stones = 6, players picking stones as playerA - playerB - playerA - playerB - playerA - playerB
แนวทางการแก้ปัญหา
วิธีหนึ่งในการแก้ปัญหาคือการหาสูตรทั่วไปสำหรับค่า N และผู้ชนะของเกม มาดูค่า N และผู้ชนะในแต่ละกรณีกัน
N =1 ผู้ชนะ =ผู้เล่นA
N =2 ผู้ชนะ =ผู้เล่นB
N =3 ผู้ชนะ =ผู้เล่นA
จากนี้ เราสามารถสรุปได้ว่าถ้า N เป็นเลขคี่ ผู้เล่น A เป็นผู้ชนะ และถ้า N เป็นเลขคู่ ผู้เล่น B เป็นผู้ชนะ
ตัวอย่าง
โปรแกรมเพื่อแสดงการทำงานของโซลูชันของเรา
#include<iostream> using namespace std; bool findGameofNimWinner(int N){ if(N%2 == 0) return 0; else return 1; } int main(){ int N = 26; cout<<"The winner of the Game of Nim is "; findGameofNimWinner(N) ? (cout << "Player A") : (cout << "Player B"); return 0; }
ผลลัพธ์
The winner of the Game of Nim is Player B