สมมุติว่าเรากำลังเล่นเกมชื่อ Nim Game กับผู้เล่นอื่น มีกองหิน ทุกครั้งที่ผู้เล่นคนหนึ่งผลัดกันเอาหิน 1 ถึง 3 ออก ผู้ที่เอาหินก้อนสุดท้ายออกจะเป็นผู้ชนะ ผู้เล่นที่ 1 จะทำการเลี้ยวครั้งแรกเพื่อเอาหินออก ผู้เล่นทั้งสองคนฉลาดมากและมีกลยุทธ์ที่เหมาะสมที่สุดสำหรับเกม เราต้องสร้างอัลกอริธึมเพื่อพิจารณาว่าผู้เล่น 1 สามารถชนะเกมได้หรือไม่โดยพิจารณาจากจำนวนหินในกอง
ดังนั้น หากอินพุตเท่ากับ 5 ผลลัพธ์จะเป็นจริง เนื่องจากมี 5 สโตน ดังนั้นในตอนเริ่มต้น หากผู้เล่น 1 หยิบหินหนึ่งก้อน ผู้เล่นคนที่สองสามารถรับหินได้ 1 ถึง 3 ก้อน , จะเหลือหินอย่างน้อยหนึ่งก้อนหลังจากเทิร์นของผู้เล่นที่ 2 ดังนั้นผู้เล่นที่ 1 จึงสามารถชนะได้
ซึ่งสามารถแก้ไขได้โดยใช้ขั้นตอนง่ายๆ เพียงขั้นตอนเดียว -
-
คืนค่า จริง เมื่อ n mod 4 ไม่เหมือนกับ 0 มิฉะนั้น เท็จ
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
#include <bits/stdc++.h> using namespace std; class Solution { public: bool canWinNim(int n) { return n%4!=0; } }; main(){ Solution ob; cout << (ob.canWinNim(5)); }
อินพุต
5
ผลลัพธ์
1