蒙提霍尔(三门问题)go程序模拟

在某个电视节目比赛环节中,参赛者会看见三扇关闭了的门,其中一扇的后面有一辆汽车,选中后面有车的那扇门可赢得该汽车,另外两扇门后面则各藏有一只山羊。参赛者选定了一扇门,但未开启它,随后节目主持人蒙提霍尔(Monty Hall)开启了剩下的两扇门中的一扇并且发现后面是一只山羊,此时主持人会给予选手重新选择的机会。问题是:此时参赛者换另一扇门会否增加赢得汽车的机率?

package main

import (
	"fmt"
	"math/rand"
	"time"
)

var (
	choose, answer                                   int
	successChange, successKeep, successUnknownChange = 0, 0, 0
)

func main() {
	rand.Seed(time.Now().UnixNano())
	for i := 0; i < 10000; i++ {
		choose = rand.Intn(3)
		answer = rand.Intn(3)
		//不换且正确
		if answer == choose {
			successKeep++
		}
		//主持知道答案,排除一个,选择换(第一次选中换后不可能选中)
		if (choose+1)%3 == answer || (choose+2)%3 == answer {
			successChange++
		}
		//主持不知道答案,随机排除,选择换
		newChoose := (choose + rand.Intn(2)) % 3
		if newChoose == answer {
			successUnknownChange++
		}
	}
	fmt.Println(successChange)
	fmt.Println(successKeep)
	fmt.Println(successUnknownChange)
}

运行结果

~/projects/go_test$ go run main.go
6586
3414
3369

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注