这个问题描述是这样的:房间里有 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;
       }
  }

排序

我们可以发现,初始时所有人的财富值相等,随着游戏的进行,财富值差距越来越大,而不是均匀分布。

感兴趣继续研究的小伙伴可以下载下方的源码。


©著作权归作者所有:来自51CTO博客作者mb5fe18fab305a5的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. Swoole自定义项目初始化事件处理的实现
  2. PHP变量的初始化以及赋值方式介绍
  3. 关于php中变量的初始化以及赋值方式的介绍
  4. 初始化 Java 数据字段(学习 Java 编程语言 033)
  5. MAC 环境下初始化mysql root 密码
  6. 初始化mysql数据库 /usr/bin/mysql_install_db执行时报错
  7. 使用Node.js初始化和配置AWS

随机推荐

  1. 【早读汇】上海@瑞心扉雪《CSS揭秘》笔记
  2. 【第814期】你不懂JS:ES6与未来 语法(下)
  3. 2016,我做了什么?
  4. Android(安卓)本地代码如何输出日志
  5. RocketMQ 源码分析 —— Message 发送与
  6. 【早读汇】上海@jean-lee《ES6标准入门》
  7. 【第773期】你不懂JS:行为委托
  8. 浅谈Android开机启动速度优化
  9. 【第824期】小公司的一年,一起看看小公司
  10. 【第786期】深入了解 JavaScript 中的 fo