嘔心瀝血演算法題——取球博弈
阿新 • • 發佈:2018-12-26
// 今盒子裡有n個小球,A、B兩人輪流從盒中取球,每個人都可以看到另一個人取了多少個, // 也可以看到盒中還剩下多少個,並且兩人都很聰明,不會做出錯誤的判斷。 // 我們約定: // 每個人從盒子中取出的球的數目必須是:1,3,7或者8個。 // 輪到某一方取球時不能棄權! // A先取球,然後雙方交替取球,直到取完。 // 被迫拿到最後一個球的一方為負方(輸方) // 請程式設計確定出在雙方都不判斷失誤的情況下,對於特定的初始球數,A是否能贏? function contest() { if (n >= 1) { switch (n) { case 1: return false; // 剩1個球,則輸 case 3: return false; // 剩3個球,則輸 case 7: return false; // 剩7個球,則輸 case 8: return true; // 剩8個球,則贏 // 如果不是不是1,3,7,8則 選擇權交給B,B任然呼叫該函式,不過返回值需要取反 // 而此時A可以選的只有 1 3 7 8 所以用num減去之 逐個測試即可 default: return (!contest(n - 8) || !contest(n - 7) || !contest(n - 3) || !contest(n - 1)); } } else { return false; } }