日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

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

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

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

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

單堆尼姆游戲:

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

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

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

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

3. 那么任意 1 + (m+1) <= s <= m +(m+1)都是一個勝局,因為無論玩家A怎么走,都會給對面一個必輸?shù)木置妗?/span>

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

總結(jié):如果棋子數(shù)量n為m+1的倍數(shù),那么先手的人是一個敗局,否則先手的人是一個勝局,當(dāng)然前提是雙方都知道最優(yōu)策略。

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("先手贏");}} }當(dāng)然除了單堆尼姆游戲,還有多對尼姆游戲,巧妙的是,對于多堆尼姆游戲的解來說,它基于堆中棋子數(shù)的二進(jìn)制表示。、

多堆尼姆游戲:

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

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

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

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






總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。