Nim 遊戲 -(拿石頭遊戲)

Nim遊戲的規則是:spa

1. 有N個石頭(確定大於0不然就無法玩了)code

2. 有兩個玩家(由於就大家兩個好基友)blog

3. 本身先下手(夠腹黑的,嘿嘿)遊戲

4. 每次必須拿1-3個石頭(不能太貪婪)class

5. 最後拿完的算贏(所有都歸最後拿完的那我的,若是石頭是鑽石的話……,這結果會不會致使基友感情破裂?)二進制

 

經過規則發現了一些訣竅:im

1. 若是輪到本身的時候餘數爲1-3,也就是本身能拿完的時候就贏了;di

2. 若是留給對方的是4個,不管對方怎麼拿最終留給本身的老是能一次拿完;相反,你要是獲得4個,那你就輸了;co

3. 做爲腹黑的你確定要千方百計讓對方留給你1-3個,或者儘量的留給對方4個;return

4. 只要留給本身的不是4的整數倍,本身就能贏(拿完者贏),由於只要本身不是4的整數倍,本身就能讓對方一直變成4的整數倍

 

因此方案就是:

本身要儘量的讓對方拿石子以前變成4的整數倍,而本身決不能出現這種狀況;

本着雙方都是有着愛因斯坦般聰明無比的原則,顯然輪到本身時剩餘量爲4的整數倍本身就輸了;

 

代碼

1 return ((n % 4) != 0);      // 若是除以4求餘結果不是0說明不是4的整數倍
2 return ((n & 0b11)!=0);      // 0b11是二進制3的意思,這裏是位與,至關於保留最後兩個比特,若是結果不是0說明不是4的整數倍
3 return ((n >> 2 << 2) != n);   // n右移兩位再左移兩位若是不能和原來的數相同,說明右移丟失的2個比特不是0,這也證實了不是4的整數倍
相關文章
相關標籤/搜索