关于知乎上 “房间内有 100 人,每人有 100 块,每分钟随机给另一个人 1 块,最后这个房间内的财富分布怎样?” 的实现
关于知乎上 房间内有 100 人,每人有 100 块,每分钟随机给另一个人 1 块,最后这个房间内的财富分布怎样?,我理解为:
每分钟每一个人给随机的另外一个1块,如果没钱则无需交给别人。
兴趣来了便用代码实现,代码实现如下:
header("Content-type: text/html; charset=utf-8");
$people = [];
for($i=1;$i<=100;$i++){
$people[$i] = 100;
}
$day = 365*10; //$day天后的执行结果
$end_time = $day*24*60;
for($start=0;$start<$end_time;$start+=60){
foreach($people as $k=>$v){
if($v>0){
$people[$k] --;
$id = rand(1,100);
$people[$id] ++;
}
}
}
$a = $b = $c = 0;
$a_name = $b_name = $c_name = '';
foreach($people as $k=>$v){
if($v>100){
$a ++;
$a_name .= $k.',';
}elseif($v == 100){
$b ++;
$b_name .= $k.',';
}else{
$c ++;
$c_name .= $k.',';
}
}
echo '大于100的人数:'.$a.'人,是['.$a_name.']';
echo "<br/>";
echo '等于于100的人数:'.$b.'人,是['.$b_name.']';
echo "<br/>";
echo '小于100的人数:'.$c.'人,是['.$c_name.']';
echo "<br/>";
执行结果为:
大于100的人数:68人,是[1,2,3,5,6,8,9,11,12,14,15,17,18,20,21,23,24,26,27,28,30,31,33,34,36,37,39,40,42,43,45,46,48,49,51,52,53,55,56,58,59,61,62,64,65,67,68,70,71,73,74,76,77,78,80,81,83,84,86,87,89,90,92,93,95,96,98,99,]
等于于100的人数:0人,是[]
小于100的人数:32人,是[4,7,10,13,16,19,22,25,29,32,35,38,41,44,47,50,54,57,60,63,66,69,72,75,79,82,85,88,91,94,97,100,]
经过测试发现大于5年以后数据每次都是以上结果。不知道这是为啥?
推荐文章: