Aquacolor

Aquacolor



三扇门的概率问题模拟

Gumdrop · 2025-12-11 · 23浏览 · 未分类


#include<iostream>
#include<array>
#include<list>
#include<random>

using namespace std;

bool test1(default_random_engine& urng) {
	uniform_int_distribution dist(0, 2);
	array<int, 3> situ{ 0,0,0 };
	int car = dist(urng);
	situ[car] = 1;
	int select = dist(urng);
	return situ[select] == 1;
}

bool test2(default_random_engine& urng) {
	uniform_int_distribution dist(0, 2);
	list<int> situ{ 0,0,0 };
	int car = dist(urng);

	int ind = 0;
	for (auto& i : situ)
	{
		if (ind == car) 
			i = 1;
		++ind;
	}

	uniform_int_distribution dist2(0, 1);
	int del = dist2(urng);
	list<int>::iterator it = situ.begin();
	for (int i = 0; i < 3; ++i) {
		if (*it == 0) {
			if (del == 0) {
				situ.erase(it);
				break;
			}
			--del;
		}
		++it;
	}

	int select = dist2(urng);
	it = situ.begin();
	while (select--)
		++it;
	return *it == 1;
}

bool test3(default_random_engine& urng) {
	uniform_int_distribution dist(0, 2);
	list<int> situ{ 0,0,0 };
	int car = dist(urng);

	int ind = 0;
	for (auto& i : situ)
	{
		if (ind == car)
			i = 1;
		++ind;
	}

	int select1 = dist(urng);

	uniform_int_distribution dist2(0, 1);
	int del = dist2(urng);
	list<int>::iterator it = situ.begin();
	for (int i = 0; i < 3; ++i) {
		if (*it == 0) {
			if (i != select1) {
				if (del <= 0) {
					del = i;
					break;
				}
				--del;
			}
			else --del;
		}
		++it;
	}

	int select2 = 0;
	for (int i = 0; i < 3; ++i) {
		if (i != select1 && i != del) {
			select2 = i;
			break;
		}
	}

	it = situ.begin();
	while (select2--)
		++it;
	return *it == 1;
}

int main() {
	random_device rd;
	mt19937 urng(rd());

	for (int j = 0; j < 3; ++j) {
		int count = 0;
		for (int i = 0; i < 10000; ++i) {
			count += test1(urng);
		}
		cout << count << endl;
	}
	cout << endl;

	for (int j = 0; j < 3; ++j) {
		int count = 0;
		for (int i = 0; i < 10000; ++i) {
			count += test2(urng);
		}
		cout << count << endl;
	}
	cout << endl;

	for (int j = 0; j < 3; ++j) {
		int count = 0;
		for (int i = 0; i < 10000; ++i) {
			count += test3(urng);
		}
		cout << count << endl;
	}
	cout << endl;

}

三扇门中有一扇是正确的,选择一个门后,排除一个错误的,再更换成另一扇门。

最后选择正确的概率大于50%!!

也就是说多对多错选一的情况下,排除了错的,会减小换了后错的可能性;排除了对的,会减小换了后对的可能性。

2025-12-11T09:23:15.png



©

comment 评论区

添加新评论

face表情



  • ©2026 bilibili.com

textsms
内容不能为空
昵称不能为空
email
邮件地址格式错误
web
beach_access
验证码不能为空
keyboard发表评论


star_outline 咱快来抢个沙发吧!




©2026 Aquacolor

Theme Romanticism2.2 by Akashi
Powered by Typecho