请教一道R语言的统计题。。急T^T在线等 20
假设有n个人去餐馆,每个人都戴了一顶帽子并将帽子寄存在餐馆门口。管理寄存帽子的人不小心将n个人的帽子打乱了,不知道哪顶帽子是属于谁的。当那n个人离开时,他便把任意一顶帽子...
假设有n个人去餐馆,每个人都戴了一顶帽子并将帽子寄存在餐馆门口。管理寄存帽子的人不小心将n个人的帽子打乱了,不知道哪顶帽子是属于谁的。当那n个人离开时,他便把任意一顶帽子归还给离开的人。n个人走的顺序是随机的。模拟一个R语言来回答以下问题:
1. 假设n=5。计算出没有一个人拿到自己帽子的概率。然后计算出至少有1个人拿到了自己帽子的概率。
2. 假设n=5。计算出拿到自己帽子的人数的平均数。
3. 重复第1问和第2问,当n=20的时候。
4. 假设n=50。计算出至少有1个人拿到了自己帽子的概率。计算出拿到自己帽子的人数的平均数。
5. 用更大的n来计算没有一个人拿到自己帽子的概率和拿到自己帽子的人数的平均数。
(提示:你需要模拟至少1000次,不断统计每一次有多少人拿到自己的帽子。) 展开
1. 假设n=5。计算出没有一个人拿到自己帽子的概率。然后计算出至少有1个人拿到了自己帽子的概率。
2. 假设n=5。计算出拿到自己帽子的人数的平均数。
3. 重复第1问和第2问,当n=20的时候。
4. 假设n=50。计算出至少有1个人拿到了自己帽子的概率。计算出拿到自己帽子的人数的平均数。
5. 用更大的n来计算没有一个人拿到自己帽子的概率和拿到自己帽子的人数的平均数。
(提示:你需要模拟至少1000次,不断统计每一次有多少人拿到自己的帽子。) 展开
1个回答
展开全部
fun<-function(n){
times=1000; #模拟次数
none=0;
over=0;
sum=0;
for(i in 1:times){
A=1:n #代表1到n号人
B=1:n #代表1到n号帽
num=0; #有num个人得到自己的帽子
max=n;
for(j in 1:n-1){
rand=round(runif(2,min=1,max=max)) #产生2个随机数,取整
people=rand[1]
hat=rand[2]
if(A[people]==B[hat]){
num=num+1
}
A<-A[-people] #删除走的人
B<-B[-hat] #删除掉已拿走的帽子
max=max-1 #随机数最大值减一
}
if(num==0)none=none+1;
if(num>0)over=over+1;
sum=sum+num/n;
}
c(
over/times, #至少有1个人拿到了自己帽子的概率
none/times, #没有一个人拿到自己帽子的概率
sum/times #得到自己帽子的概率
)
}
times=1000; #模拟次数
none=0;
over=0;
sum=0;
for(i in 1:times){
A=1:n #代表1到n号人
B=1:n #代表1到n号帽
num=0; #有num个人得到自己的帽子
max=n;
for(j in 1:n-1){
rand=round(runif(2,min=1,max=max)) #产生2个随机数,取整
people=rand[1]
hat=rand[2]
if(A[people]==B[hat]){
num=num+1
}
A<-A[-people] #删除走的人
B<-B[-hat] #删除掉已拿走的帽子
max=max-1 #随机数最大值减一
}
if(num==0)none=none+1;
if(num>0)over=over+1;
sum=sum+num/n;
}
c(
over/times, #至少有1个人拿到了自己帽子的概率
none/times, #没有一个人拿到自己帽子的概率
sum/times #得到自己帽子的概率
)
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询