R语言模拟投硬币掷骰子

原创
2017/03/30 13:50
阅读数 1.6K

#掷骰子100次
a=sample(c(1:6),100,replace=T)

#硬币的正面记为1,反面记为0,开始投掷,只要投出背面就停止。模拟一万次求平均模拟停止时的次数
len=NULL           ##初始化
for(i in 1:10000){
 y=NULL
 repeat{
  x=sample(c(0,1),1)
  y=c(y,x)
  if(x==0)  break
 }

 len=c(len,length(y))
}
sum(len)/10000

#均匀硬币的正面记为1,反面记为0,开始投掷,只要有连续三次投掷出“110”这样的结果就停止。
#请问:模拟停止时的次数;模拟一万次,平均投掷次数是?

##先模拟一次投掷出110
y=sample(c(0,1),3,replace=T)
i=3
repeat{
  if(y[i]==0&&y[i-1]==1&&y[i-2]==1) break     #最后三位是110即停止循环
  y = c(y,sample(c(0,1),1,replace=T))       #如果不是的话,继续抽样并将原值赋给y
  i=i+1
}
length(y)

##接下来是连续三次投掷出110 是不是只要重复y[i]==0部分就可以了?
y=sample(c(0,1),9,replace=T)
i=9
repeat{
  if(y[i]==0&&y[i-1]==1&&y[i-2]==1&&y[i-3]==0&&y[i-4]==1&&y[i-5]==1&&y[i-6]==0&&y[i-7]==1&&y[i-8]==1) break     #
  y = c(y,sample(c(0,1),1,replace=T))
  i=i+1
}
length(y)

#[1] 60  结果

##将上面的过程重复一万遍,求length均值 
len=0
for(i in 1:10){    ##为了快点得到结果我写成了10次
  y=sample(c(0,1),9,replace=T)
  i=9
  repeat{
    if(y[i]==0&&y[i-1]==1&&y[i-2]==1&&y[i-3]==0&&y[i-4]==1&&y[i-5]==1&&y[i-6]==0&&y[i-7]==1&&y[i-8]==1) break     #
    y = c(y,sample(c(0,1),1,replace=T))
    i=i+1
  }
  len=length(y)
  len=c(len,length(y))
}
sum(len)/10

#[1] 85.4  结果

如果你有其他的方法,欢迎加我博客好友交流
 

展开阅读全文
R
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部