1. 程式人生 > 其它 >巴什博弈和威佐夫博弈

巴什博弈和威佐夫博弈

巴什博弈

問題描述

  • 一共n個物品,兩個人輪流取且一次最多取m個最少取1個,誰先去完誰贏。

解釋

  • 假設n=(m+1)*r+s,其中r為任意自然數,s為正整數。先手只要取走s個那麼剩下的就是m+1的倍數,只要先手根據後手拿的個數拿走對應的個數讓剩下的個數一直維持在m+1的整數倍,那麼最後拿完的一定是先手。
  • 以此類推,如果上來的n正好是m+1的倍數,那麼不管先手拿多少都會讓n變為(m+1)*r+s,這樣就可以看成“先手變成了後手,後手變成了先手”,那麼後手就必贏
  • 綜上所述,如果n為m+1的整數倍,那麼後手必贏;如果n不是m+1的整數倍,那麼先手必贏。

拓展

  • 如果是先拿完的輸呢?
  • 那麼贏的那個人就肯定會給對方留最後一張,這也就是說先拿完n-1個物品的人就贏了
  • 因此,如果n-1是m+1的整數倍,那麼後手贏;如果n-1不是m+1的整數倍,那麼先手贏。

程式碼

<---------------- 先拿完的贏 ----------------->
#include<i