一个有意思的分钱模拟问题
16lz
2021-01-22
这个问题描述是这样的:房间里有 100 个人,每人都有 100 元钱,他们在玩一个游戏。每轮游戏中,每个人都要拿出一元钱随机给另一个人,最后这 100 个人的财富分布是怎样的?
猜一下,经过 10000 次的交换,你们认为最后的结果会是怎么样子的?
5
4
3
2
1
登登登,答案是这个样子的。
和你的直觉想法有出入吗?是不是一开始认为是平均分布的?
事实上,很多人一开始都没想到结果会是这样子的。
我们借助 Java GUI 来可视化的理解这个问题。
首先初始化数据,一开始每人都有 100 元钱。
// 初始化数据
money = new int[100];
for(int i = 0 ; i < money.length ; i ++)
money[i] = 100;
初始状态
然后每轮游戏中,每个人都要拿出一元钱随机给另一个人,
for(int i = 0 ; i < money.length; i ++){
if(money[i] > 0){
int j = (int)(Math.random() * money.length);
money[i] -= 1;
money[j] += 1;
}
}
不够直观?那我们可以先排序再显示。
Arrays.sort(money);
for(int i = 0 ; i < money.length; i ++){
if(money[i] > 0){
int j = (int)(Math.random() * money.length);
money[i] -= 1;
money[j] += 1;
}
}
排序
我们可以发现,初始时所有人的财富值相等,随着游戏的进行,财富值差距越来越大,而不是均匀分布。
感兴趣继续研究的小伙伴可以下载下方的源码。
更多相关文章
- Swoole自定义项目初始化事件处理的实现
- PHP变量的初始化以及赋值方式介绍
- 关于php中变量的初始化以及赋值方式的介绍
- 初始化 Java 数据字段(学习 Java 编程语言 033)
- MAC 环境下初始化mysql root 密码
- 初始化mysql数据库 /usr/bin/mysql_install_db执行时报错
- 使用Node.js初始化和配置AWS