1. 程式人生 > >CSU 2048: Bash遊戲升級版

CSU 2048: Bash遊戲升級版

Description

軟體學院的新生課上,老師講述過這樣一個遊戲。有n個石子,2個人輪流取石子,每輪取走1…m個石子,問如何獲勝。這個遊戲又稱作巴什博弈(Bash Game)。

巴什博弈就是隻有一堆n個物品,兩個人輪流從這堆物品中取物,規定每次至少取一個,最多取m個。最後取光者得勝。
顯然,如果n=m+1,那麼由於一次最多隻能取m個,所以,無論先取者拿走多少個,後取者都能夠一次拿走剩餘的物品,後者取勝。因此我們發現瞭如何取勝的法則:如果n=(m+1)r+s,(r為任意自然數,s≤m),那麼先取者要拿走s個物品,如果後取者拿走k(k≤m)個,那麼先取者再拿走m+1-k個,結果剩下(m+1)(r-1)個,以後保持這樣的取法,那麼先取者肯定獲勝。總之,要保持給對手留下(m+1)的倍數,就能最後獲勝。

這個遊戲還可以有一種變相的玩法:兩個人輪流報數,每次至少報一個,最多報十個,誰能報到100者勝。

現在,我們要該變一下游戲規則,相對於標準的巴什博奕,我們規定最後取光者輸,那麼又會如何呢?
顯然,(n-1)%(m+1)==0則後手勝利
先手會重新決定策略,所以不是簡單的相反行的
例如n=15,m=3
後手 先手 剩餘
0  2  13
1  3  9
2  2  5
3  1  1
1  0  0

先手勝利,輸的人最後必定只抓走一個,如果最後剩下的個數大於1個,則必定會留一個給對手。

現在,我們再次改變一下游戲規則。相對於標準的巴什博奕,我們規定先取者第1次可以取任意多個,但不能全部取完,以後每次取的物品數不能超過上次取的數量的2倍。取完者勝。 現在想請問已經做過資料結構實驗一的你,兩人開始博弈後,誰有必勝的把握呢?
先取者負輸出"Second win". 先取者勝輸出"First win".

相關推薦

CSU 2048: Bash遊戲升級

Description軟體學院的新生課上,老師講述過這樣一個遊戲。有n個石子,2個人輪流取石子,每輪取走1…m個石子,問如何獲勝。這個遊戲又稱作巴什博弈(Bash Game)。巴什博弈就是隻有一堆n個物品,兩個人輪流從這堆物品中取物,規定每次至少取一個,最多取m個。最後取光者得勝。顯然,如果n=m+1,那麼由

Python—猜年齡遊戲升級

-c lose 技術 break 升級版 src 技術分享 內心 fab 要求: 1.允許用戶最多嘗試三次 2.每嘗試3次後,如果還沒有猜對,就問用戶是否還想繼續,如果回答N或者n,就退出程序 3.如果猜對了,直接退出程序 1 count = 0 2 age = ‘

iOS 小遊戲專案——你話我猜升級

級別: ★☆☆☆☆ 標籤:「iOS」「小遊戲專案」「你話我猜」 作者: MrLiuQ 審校: QiShare團隊 前言:最近公司部門在組織團建,需要準備兩個團建小遊戲, 分別是“數字速算升級版”和“你話我猜升級版”。 小編琢磨了一下,發現這個兩個小專案很適合iOS入門學習,故這篇文章誕生了。 本

iOS 小遊戲專案——數字速算升級

級別: ★☆☆☆☆ 標籤:「iOS」「小遊戲專案」「數字速算」 作者: MrLiuQ 審校: QiShare團隊 前言:最近公司部門在組織團建,需要準備準備兩個團建小遊戲, 分別是“數字速算升級版”和“你話我猜升級版”。 小編琢磨了一下,發現這個兩個小專案很適合入門iOS,故這篇文章誕生了。 本

C++實現2048遊戲(控制檯的)

無聊,在公司寫了個2048小遊戲的程式,聊以自娛。(事實是我手機壞了,沒得玩)。 很簡單,直接上程式碼了。 #include <iostream> #include <windows.h> #include <ctime> using

C語言在linux終端下實現2048遊戲:第二

原來我轉載過一個機遇ncurses的2048,今天無聊自己手寫了一個,看下我的目錄結構: $ tree ../2048/ ../2048/ ├── 2048.c ├── 2048.h └── main.c 0 directories, 3 files 2048.h

C++ 控制檯 2048遊戲

先說說2048遊戲的規則: 開始的時候空格中會出現兩個數字(只能為2或者4),使用者可以選擇上下左右鍵進行移動,數字們整體沿著方向移動,中間不存在空格,如果相鄰的兩個數字相等,那麼合併至沿著方向的後一個,更新最大值,總分數加上新出現的數字。當出現2048,Win。或者沒有空

javascript 2048遊戲

<!DOCTYPE html> <html lang="zn"> <head> <meta charset="UTF-8"> <title>2048</title> <li

2048遊戲java

最近上java看,寫了個2048遊戲 分3個檔案,一個是Game類寫演算法的,一個是Win類寫圖形介面的,一個是遊戲的主類my2048 主要演算法思路:每次上下左右,分割成單獨一行或者一列處理,就變成了對一維陣列處理  先遍歷,把相鄰的2個相同的相加,再按方向移到一邊 程式

2048遊戲主要算法實現

mes 方向 時間限制 上下左右 print ron weight color ges http://acm.tzc.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=4681 4681: 2

1068 Bash遊戲 V3

num mes ext ural nod name http 的人 可能 1068 Bash遊戲 V3 題目來源: Ural 1180 基準時間限制:1 秒 空間限制:131072 KB 分值: 20 難度:3級算法題 收藏 關註 有一堆石子共有N個。

[luoguP2626] 斐波那契數列(升級)(模擬)

sub std [1] 斐波那契數 == cnblogs () ios git 傳送門 模擬 代碼 #include <cmath> #include <cstdio> #include <iostream>

Python_Shutil模塊_os模塊的升級

結構 打開 目錄下的文件 root rbo path zip 對象 修改時間 一、拷貝文件 1、shutil.copyfile(src, dst):復制文件內容(不包含元數據)從src到dst。 DST必須是完整的目標文件名;拷貝目錄參見shutil.copy()。如果sr

洛谷 P1618 三連擊(升級

span main 比例 pre color clu 輸出 std mut 題目描述 將1,2,…,9共9個數分成三組,分別組成三個三位數,且使這三個三位數的比例是A:B:C,試求出所有滿足條件的三個三位數,若無解,輸出“No!!!”

C++的網絡數據包解析策略(升級)

bfd sum between protocol log class pro cli 分享 初版:http://www.cnblogs.com/wjshan0808/p/6580638.html 說明:在實現了對應的接口後該策略可以適合絕大多數的網絡數據包結構 首先,是

51nod 1066 Bash遊戲 Bash博弈

個人 input txt 如果 n) cpp log -- can 1066 Bash遊戲 基準時間限制:1 秒 空間限制:131072 KB 分值: 0 難度:基礎題 收藏 關註 有一堆石子共有N個。A B兩個人輪流拿,A先拿。

Brackets Sequence(升級

個人心得 std 解題思路 暫時 string main amp esp 括號序列 個人心得:又是途徑問題,我怕是又炸了。看了題解他的意思就是找出最短的添加順序的斷點,則只要 根據斷點添加就好了,註意遞歸的奧妙之處吧,暫時還真得是拿他沒辦法。 題目描述: 定義合法的括號序列

51nod 1070 Bash遊戲 V4

name include pan int c++ 博弈 ear nod while 這種博弈題 都是打表找規律 可我連怎麽打表都不會 這個是湊任務的吧....以後等腦子好些了 再琢磨吧 就是斐波那契數列中的數 是必敗態 #include<bi

【python學習】使用python寫一個2048遊戲

ast stc 遊戲 多少 wan nbsp 小遊戲 效果 參考 個人博客:jerwang.cn 沒有參考其他代碼,效果圖: 話不多少,源代碼: https://github.com/jerustc/Python/blob/master/2048.py【python學

csu 1958: 數字遊戲

ios href tput name 數字 for ima 得出 ++ 1958: 數字遊戲 Submit Page Summary Time Limit: 2 Sec Memory Limit: 128 Mb Submitted: 134