问题简述:
吉占:摸牌阶段,你可以改为展示牌堆顶的一张牌,猜测牌堆顶的下一张牌点数大于或小于此牌,然后展示之,若猜对,你可重复此流程,然后你获得以此法展示的牌。
牌库中存在3套牌,一套牌有52张(4X13),在此基础上添加2,Q两张,5一张作为牌库。随机取一张作为库顶,从剩余牌中取一张,比大小(只能比大小),正确则继续,错误则退出。求、按照某种特定的策略,计算能打开的最大牌数N(包含已经被打开的,也就是说N>=2)。
def simulate_game():
import random
paiku = [i + 1 for i in range(13)]
paikuo = paiku
# 生成3套牌库,共计3X4X13
for i in range(0, 11):
paiku += paikuo
pk = paiku
#2 and 12添加2张,5加1张
pk = pk + [2, 2, 12, 12, 5]
# 牌数n初始为2
n = 2
global de, dde
# 初始化,准备一张顶牌
top = pk[random.randint(0, len(pk) - 1)]
pk.remove(top)
while len(pk) >= 1:
# 做决定,计算此时,下一张牌能猜对的概率
# 牌是相同的概率为pe,下一张比这一张牌大的概率为pm,比这一张牌小的概率为pl
pm = len([i for i in pk if i > top]) / len(pk)
pl = len([i for i in pk if i < top]) / len(pk)
if pm > pl:
de = 1
elif pm < pl:
#print("猜小")
de = 0
else:
de = random.randint(0,1)
#由于只有大小,相等必为错,所以即使知道极端情况剩下的八张都是一样的,也会猜错,就随便猜。
# 从剩余的卡牌中随机抽牌
flip = pk[random.randint(0, len(pk)-1)]
#更新牌库,去掉这一张
pk.remove(flip)
# 比大小
# step1 定义客观大小
if flip == top:
dde = 2
elif flip > top:
dde = 1
elif flip < top:
dde = 0
# step2 判断正确与否
if de == dde:
#判断正确,牌数+1
n+=1
else:
break
top = flip
return n
s = 0
for j in range(1, 50000):
s += simulate_game()
print(s/len(range(1, 50000)))
仿真50000次后的期望为: 4.22062441248825