双色球 快乐8概率和期望
快乐8
def C(m, n):
ret = 1
for i in range(n):
ret *= (m-i) / (i+1)
return int(ret)
def P(m, n, total=80, right=20):
sum = 0
if (total <= right):
return 0
error = total - right
for i in range(0, m+1):
sum += C(error, i)*C(right, m-i)
return C(right, n)*C(error, m-n) / sum
def E(m, order):
e = 0
classes = len(order)
if(classes != len(rewards[m-1])):
print("中奖规则和奖励不匹配!")
return e
for i in range(classes, 0, -1):
p_level = P(m, order[i-1])
e_level = p_level * rewards[m-1][i-1] / 2
print("第%d等奖概率:%.10f 期望:%.10f" % (classes-i+1, p_level, e_level))
e += e_level
return e
reward1 = [4.6]
reward2 = [19]
reward3 = [3, 53]
reward4 = [3, 5, 100]
reward5 = [3, 21, 1000]
reward6 = [3, 10, 30, 3000]
reward7 = [2, 4, 28, 288, 10000]
reward8 = [2, 3, 10, 88, 800, 50000]
reward9 = [2, 3, 5, 20, 200, 2000, 300000]
reward10 = [2, 3, 5, 80, 800, 8000, 5000000]
rewards = [reward1, reward2, reward3, reward4, reward5,
reward6, reward7, reward8, reward9, reward10]
print("选 1: %.10f\n" % E(1,[1]))
print("选 2: %.10f\n" % E(2,[2]))
print("选 3: %.10f\n" % E(3,[2, 3]))
print("选 4: %.10f\n" % E(4,[2, 3, 4]))
print("选 5: %.10f\n" % E(5,[3, 4, 5]))
print("选 6: %.10f\n" % E(6,[3, 4, 5, 6]))
print("选 7: %.10f\n" % E(7,[0, 4, 5, 6, 7]))
print("选 8: %.10f\n" % E(8,[0, 4, 5, 6, 7, 8]))
print("选 9: %.10f\n" % E(9,[0, 4, 5, 6, 7, 8, 9]))
print("选10: %.10f\n" % E(10,[0, 5, 6, 7, 8, 9, 10]))
结果
第1等奖概率:0.2500000000 期望:0.5750000000
选 1: 0.5750000000
第1等奖概率:0.0601265823 期望:0.5712025316
选 2: 0.5712025316
第1等奖概率:0.0138753651 期望:0.3676971762
第2等奖概率:0.1387536514 期望:0.2081304771
选 3: 0.5758276534
第1等奖概率:0.0030633923 期望:0.1531696152
第2等奖概率:0.0432478913 期望:0.1081197284
第3等奖概率:0.2126354658 期望:0.3189531987
选 4: 0.5802425423
第1等奖概率:0.0006449247 期望:0.3224623478
第2等奖概率:0.0120923380 期望:0.1269695494
第3等奖概率:0.0839350523 期望:0.1259025784
选 5: 0.5753344757
第1等奖概率:0.0001289849 期望:0.1934774087
第2等奖概率:0.0030956385 期望:0.0464345781
第3等奖概率:0.0285379178 期望:0.1426895889
第4等奖概率:0.1298195475 期望:0.1947293213
选 6: 0.5773308970
第1等奖概率:0.0000244026 期望:0.1220127802
第2等奖概率:0.0007320767 期望:0.1054190421
第3等奖概率:0.0086385048 期望:0.1209390678
第4等奖概率:0.0521909667 期望:0.1043819335
第5等奖概率:0.1215742520 期望:0.1215742520
选 7: 0.5743270756
第1等奖概率:0.0000043457 期望:0.1086415167
第2等奖概率:0.0001604552 期望:0.0641820652
第3等奖概率:0.0023667137 期望:0.1041354008
第4等奖概率:0.0183025856 期望:0.0915129280
第5等奖概率:0.0815037015 期望:0.1222555522
第6等奖概率:0.0882662377 期望:0.0882662377
选 8: 0.5789937007
第1等奖概率:0.0000007243 期望:0.1086415167
第2等奖概率:0.0000325925 期望:0.0325924550
第3等奖概率:0.0005916784 期望:0.0591678414
第4等奖概率:0.0057195580 期望:0.0571955800
第5等奖概率:0.0326014806 期望:0.0815037015
第6等奖概率:0.1141051821 期望:0.1711577731
第7等奖概率:0.0637478384 期望:0.0637478384
选 9: 0.5740067060
第1等奖概率:0.0000001122 期望:0.2805297378
第2等奖概率:0.0000061206 期望:0.0244825953
第3等奖概率:0.0001354194 期望:0.0541677421
第4等奖概率:0.0016111431 期望:0.0644457239
第5等奖概率:0.0114793946 期望:0.0286984864
第6等奖概率:0.0514276877 期望:0.0771415316
第7等奖概率:0.0457907008 期望:0.0457907008
选10: 0.5752565180
双色球
salary = [8000000, 200000, 3000, 200, 10, 5]
p = [0, 0, 0, 0, 0, 0]
p[5] = (P(6, 0, total=33, right=6)+P(6, 1, total=33, right=6)+P(6, 2, total=33, right=6)) / C(16, 1)
p[4] = (P(6, 3, total=33, right=6)) / C(16, 1) + P(6, 4, total=33, right=6)
p[3] = (P(6, 4, total=33, right=6)) / C(16, 1) + P(6, 5, total=33, right=6)
p[2] = (P(6, 5, total=33, right=6)) / C(16, 1)
p[1] = (P(6, 6, total=33, right=6))
p[0] = (P(6, 6, total=33, right=6)) / C(16, 1)
summary_e = 0
for i in range(len(salary)):
e = p[i] * salary[i] / 2;
summary_e += e
print("第%d等奖概率:%.10f 期望:%.10f" % (i+1, p[i], e))
print("总期望:%.10f" % summary_e)
结果
第1等奖概率:0.0000000564 期望:0.2257197752
第2等奖概率:0.0000009029 期望:0.0902879101
第3等奖概率:0.0000091417 期望:0.0137124763
第4等奖概率:0.0004433701 期望:0.0443370068
第5等奖概率:0.0080548102 期望:0.0402740509
第6等奖概率:0.0588925466 期望:0.1472313664
总期望:0.5615625858