實驗目的
實驗內容 n
目的數運算元x
n目的數
運算元x11
失敗17152
21118
1533*
ran19154
43120
15553
221156
63322
1577*
ran23158
87124
15997
2251510107
3261511117
4271512127
5281513137
6291514147
730151515*
ran31
*ran
1615132
311
'''模擬聰明版尼姆遊戲
一人進行「聰明操作」
另一人隨機生成數'''
import math
import random
defsmart
(n):
logn =
int(math.log(n,2)
)if n == math.
pow(
2, logn +1)
-1:return random.randint(1,
int(n/2)
)return n -
int(math.
pow(
2, logn))+
1def
playn
(n):
if n <=3:
return
1else
:return random.randint(1,
int(n/2)
)sumnum =
int(
input
("請輸入總和:"))
while sumnum >0:
tmp = sumnum
player_smart = smart(sumnum)
sumnum = sumnum - player_smart
tmp2 = sumnum
ifnot sumnum:
print
("player_smart失敗"
) player_random = playn(sumnum)
sumnum = sumnum - player_random
ifnot sumnum:
print
("player_random失敗"
)print
("原本總和,聰明玩家出數,聰明玩家出數後,隨機玩家出數,當前剩餘"
.format
(sumnum, player_smart, player_random,tmp,tmp2)
)
一方採取聰明演算法時,獲勝概率遠遠大於隨機出數請輸入總和:123
原本總和123,聰明玩家出數60,聰明玩家出數後63,隨機玩家出數7,當前剩餘56
原本總和56,聰明玩家出數25,聰明玩家出數後31,隨機玩家出數8,當前剩餘23
原本總和23,聰明玩家出數8,聰明玩家出數後15,隨機玩家出數1,當前剩餘14
原本總和14,聰明玩家出數7,聰明玩家出數後7,隨機玩家出數3,當前剩餘4
原本總和4,聰明玩家出數1,聰明玩家出數後3,隨機玩家出數1,當前剩餘2
player_random失敗
原本總和2,聰明玩家出數1,聰明玩家出數後1,隨機玩家出數1,當前剩餘0
請輸入總和:263
原本總和263,聰明玩家出數8,聰明玩家出數後255,隨機玩家出數94,當前剩餘161
原本總和161,聰明玩家出數34,聰明玩家出數後127,隨機玩家出數21,當前剩餘106
原本總和106,聰明玩家出數43,聰明玩家出數後63,隨機玩家出數26,當前剩餘37
原本總和37,聰明玩家出數6,聰明玩家出數後31,隨機玩家出數10,當前剩餘21
原本總和21,聰明玩家出數6,聰明玩家出數後15,隨機玩家出數7,當前剩餘8
原本總和8,聰明玩家出數1,聰明玩家出數後7,隨機玩家出數3,當前剩餘4
原本總和4,聰明玩家出數1,聰明玩家出數後3,隨機玩家出數1,當前剩餘2
player_random失敗
原本總和2,聰明玩家出數1,聰明玩家出數後1,隨機玩家出數1,當前剩餘0
請輸入總和:1025
原本總和1025,聰明玩家出數2,聰明玩家出數後1023,隨機玩家出數122,當前剩餘901
原本總和901,聰明玩家出數390,聰明玩家出數後511,隨機玩家出數216,當前剩餘295
原本總和295,聰明玩家出數40,聰明玩家出數後255,隨機玩家出數29,當前剩餘226
原本總和226,聰明玩家出數99,聰明玩家出數後127,隨機玩家出數32,當前剩餘95
原本總和95,聰明玩家出數32,聰明玩家出數後63,隨機玩家出數27,當前剩餘36
原本總和36,聰明玩家出數5,聰明玩家出數後31,隨機玩家出數2,當前剩餘29
原本總和29,聰明玩家出數14,聰明玩家出數後15,隨機玩家出數2,當前剩餘13
原本總和13,聰明玩家出數6,聰明玩家出數後7,隨機玩家出數2,當前剩餘5
原本總和5,聰明玩家出數2,聰明玩家出數後3,隨機玩家出數1,當前剩餘2
player_random失敗
原本總和2,聰明玩家出數1,聰明玩家出數後1,隨機玩家出數1,當前剩餘0
'''常規方法'''
import random
defplayn
(n):
if n <=3:
return
1else
:return random.randint(1,
int(n/2)
)sumnum =
int(
input
("請輸入總和"))
while sumnum >0:
tmp = sumnum
player1 = playn(sumnum)
sumnum = sumnum - player1
ifnot sumnum:
print
("player1失敗"
) player2 = playn(sumnum)
sumnum = sumnum - player2
ifnot sumnum:
print
("player2失敗"
)print
("原本總和當前剩餘,玩家1出數,玩家2出數"
.format
(sumnum, player1, player2,tmp)
)
雙方都隨機出數時,獲勝概率是相等的請輸入總和123
原本總和123當前剩餘51,玩家1出數34,玩家2出數38
原本總和51當前剩餘29,玩家1出數13,玩家2出數9
原本總和29當前剩餘20,玩家1出數6,玩家2出數3
原本總和20當前剩餘8,玩家1出數4,玩家2出數8
原本總和8當前剩餘5,玩家1出數1,玩家2出數2
原本總和5當前剩餘2,玩家1出數2,玩家2出數1
player2失敗
原本總和2當前剩餘0,玩家1出數1,玩家2出數1
請輸入總和100
原本總和100當前剩餘56,玩家1出數14,玩家2出數30
原本總和56當前剩餘28,玩家1出數18,玩家2出數10
原本總和28當前剩餘22,玩家1出數5,玩家2出數1
原本總和22當前剩餘9,玩家1出數11,玩家2出數2
原本總和9當前剩餘3,玩家1出數3,玩家2出數3
原本總和3當前剩餘1,玩家1出數1,玩家2出數1
player1失敗
原本總和1當前剩餘-1,玩家1出數1,玩家2出數1
python實現尼姆遊戲
尼姆遊戲,這是乙個著名的遊戲,有很多變種玩法。兩個玩家輪流從一堆物品中拿走一部分。在每一步中,玩家可以自由選擇拿走多少物品,但是必須拿走一部並且最多只能拿走一半物品,然後輪到下乙個玩家。拿走最後乙個物品的玩家輸掉遊戲。先手隨機。sur bin nve python coding utf 8 impo...
python 聰明的尼姆遊戲
兩個玩家輪流從一堆物品中拿走一部分,在每一步中,玩家可以自由選擇拿走多少物品,但是必須至少拿走乙個並且最多只能拿走一半物品,然後輪到下乙個玩家。拿走最後乙個物品的玩家輸掉遊戲。在聰明模式中,計算機每次拿走足夠多的物品使得堆的大小是2 的冪次方減1 也就是3,7,15,31 或63。除了堆的大小已經是...
取石子遊戲之尼姆博弈
尼姆博弈 有三堆各若干個物品,兩個人輪流從某一堆取任意多的物品,規定每次至少取乙個,多者不限,最後取光者得勝 這種情況與二進位制有著很大的關係,我們用 a,b,c 來表示某種局勢,那麼 0,0,0 必然為奇異局勢,最後乙個面對這個局勢的必敗。0,n,n 也是種奇異局勢。因為如果對手在其中一堆取m個石...