日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

减治法解决尼姆(Nim)游戏/拈游戏问题(JAVA)

發布時間:2025/3/15 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 减治法解决尼姆(Nim)游戏/拈游戏问题(JAVA) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

尼姆游戲一種兩個人玩的回合制數學策略游戲。游戲者輪流從一堆棋子(一共有好幾堆,一次只能從其中一堆拿。)(或者任何道具)中取走一個或者多個,最后不能再取的就是輸家。當指定相應數量時,一堆這樣的棋子稱作一個尼姆堆

尼姆游戲有很多形式,也可以說很多游戲的原型都是尼姆游戲。

單堆尼姆游戲:

假設我們現在有一堆n枚棋子,兩個玩家輪流從堆中拿走至少1枚,至多m枚棋子。每次拿走的棋子數都可以不同,但能夠拿走的上下限數量是不變的。如果每個玩家都做出了最佳選擇,哪個玩家能夠拿到最后一枚棋子?是先走的還是后走的?

我們認為n=0是一個敗局,因為接下來要走的人是第一個無路可走的人。

1. 任何1 <= s <= m(s為堆中剩余棋子)的局面都是勝局,因為玩家A總能取走所有棋子,同時得到最后一枚棋子

2. s = m + 1的局面是一個敗局,因為無論玩家A取走幾枚棋子,總能把對方推向勝局,即第一種情況。

3. 那么任意 1 + (m+1) <= s <= m +(m+1)都是一個勝局,因為無論玩家A怎么走,都會給對面一個必輸的局面。

根據數學歸納法,當且僅當n不是m+1的倍數時,n個棋子的實例是一個勝局,勝利的策略是每次拿走n mod (m+1)個棋子,如果背離這個策略,則會將勝局留給對手。

總結:如果棋子數量n為m+1的倍數,那么先手的人是一個敗局,否則先手的人是一個勝局,當然前提是雙方都知道最優策略。

import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);int n = in.nextInt();int m = in.nextInt();if (n % (m+1) == 0) {System.out.println("后手贏");} else {System.out.println("先手贏");}} }當然除了單堆尼姆游戲,還有多對尼姆游戲,巧妙的是,對于多堆尼姆游戲的解來說,它基于堆中棋子數的二進制表示。、

多堆尼姆游戲:

假設我們現在有數目分別為3、 4、 5的三堆棋子,兩個玩家輪流從其中拿走至少1枚,至多為一整堆的棋子數。每次拿走的棋子數都可以不同,但能夠拿走的下限數量是不變的。如果每個玩家都做出了最佳選擇,哪個玩家能夠拿到最后一枚棋子?是先走的還是后走的?

我們需要求出每堆棋子數的二進制數位和(也叫Nim和),即對每一位分別求和并忽略進制。

實際上,當Nim和中包含至少一個1時,該實例為一個勝局;相應的,當Nim和中只包含0時,該實例為一個敗局

所以對于先走的玩家來說,這是一個勝局,走法為改變三個位串中的一個,使Nim和僅包含0,例如從第一個堆中拿走2個。






總結

以上是生活随笔為你收集整理的减治法解决尼姆(Nim)游戏/拈游戏问题(JAVA)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。