首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

LeetCode Nim Game:尼姆遊戲必勝策略

     編輯:關於C++

題目描述

堆有 n 顆石子,雙方輪流取 1~3 顆,取走最後一顆者勝。你先手。雙方均最優策略。判斷你能否獲勝。

博弈論分析

  • 1,2,3 顆:先手全拿 → 勝。
  • 4 顆:先手拿 1/2/3,剩 3/2/1,後手全拿 → 先手敗。
  • 5 顆:先手拿 1,剩 4 → 後手面對 4 必敗 → 先手勝。
  • 6 顆:先手拿 2,剩 4 → 勝。
  • 7 顆:先手拿 3,剩 4 → 勝。
  • 8 顆:先手無論拿幾,剩 5/6/7,後手可拿至 4 → 先手敗。

規律:n % 4 == 0 先手必敗,否則先手必勝。策略:先手讓剩餘為 4 的倍數,後手則每次取 4 - 對手取數。

代碼


class Solution {
public:
    bool canWinNim(int n) {
        return n % 4 != 0;
    }
};
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved