14连号问题引起了很多人的关注,该问题的精确概率很难算,不过用蒙特卡罗模拟到比较简单,美中不足的是精度不好提高。下面的代码仅仅计算存在14连号的概率,不管有几串14连号。代码本身很容易懂,大家看看:
我得到的答案是0.0045左右,谁的计算机速度快一点,不妨把模拟次数加大点,如果是服务器,那让它多跑一会看看。
如果限定只有一串14连号或者其他数目的连号,那么代码简化为:
得到的答案稍小一点。
如果有什么问题,请指出。
<br />
cont <- function(n = 50000){ <br />
x <- 0<br />
for(i in 1:n){<br />
nums <- sort(sample(1138,514))<br />
nums1 <- nums[1:501]<br />
nums2 <- nums[14:514]<br />
flag <- nums2-nums1<br />
if(any(flag==13)) x <- x + 1 #这里不区分14连号的串数<br />
<br />
nums3 <- nums[1:500]<br />
nums4 <- nums[15:514]<br />
flag <- nums4-nums3<br />
if(any(flag==14)) x <- x - 1 #去掉连号超过15的<br />
}<br />
x/n<br />
} <br />
我得到的答案是0.0045左右,谁的计算机速度快一点,不妨把模拟次数加大点,如果是服务器,那让它多跑一会看看。
如果限定只有一串14连号或者其他数目的连号,那么代码简化为:
<br />
con2 <- function(n = 50000, con = 14){ <br />
x <- 0<br />
for(i in 1:n){<br />
nums <- sort(sample(1138,514))<br />
nums1 <- nums[1:(514-con + 1)]<br />
nums2 <- nums[con:514]<br />
flag <- nums2-nums1<br />
if(sum(flag==(con-1))==1) x <- x + 1 ##注意这一句<br />
}<br />
x/n<br />
} <br />
得到的答案稍小一点。
如果有什么问题,请指出。