Home > Backend Development > PHP Tutorial > 已知n个数的和是32898,求每一个加数,求完美版

已知n个数的和是32898,求每一个加数,求完美版

WBOY
Release: 2016-06-23 13:27:55
Original
1111 people have browsed it

原帖已经结贴。只是获得的结果并不完美,总是最大数999重复太多,显得不够随机,有点假。
http://bbs.csdn.net/topics/391814341

$r = foo(32898, 53);echo array_sum($r), PHP_EOL; //验证总和print_r(array_count_values($r)); //查看分布function foo($num, $k, $min=1, $max=999) {  $res = array_fill(0, $k, 1);  do {    for($i=0; $i<$k; $i++) {      $sum = array_sum($res);      $t = rand(0, $max - $min);      if($res[$i] + $t > $max) $t = $max - $res[$i];      if($sum + $t > $num) $t = $num - $sum;      $res[$i] += $t;    }  }while($num > $sum);  return $res;}
Copy after login


请修复这个问题,谢谢。


回复讨论(解决方案)

$t = rand(0, $max - $min);
改为
$t = rand(0, $max - $res[$i]);

这样的分布应该很好了

Array(    [886] => 1    [760] => 1    [470] => 1    [875] => 1    [591] => 1    [499] => 1    [257] => 1    [954] => 1    [264] => 1    [615] => 1    [770] => 1    [644] => 1    [971] => 1    [979] => 1    [259] => 1    [906] => 1    [830] => 1    [537] => 1    [595] => 1    [531] => 1    [588] => 1    [748] => 1    [767] => 1    [844] => 1    [931] => 1    [835] => 1    [986] => 1    [976] => 1    [89] => 1    [157] => 1    [408] => 1    [582] => 1    [593] => 1    [876] => 1    [710] => 1    [130] => 1    [554] => 1    [774] => 1    [386] => 1    [339] => 1    [686] => 1    [194] => 1    [903] => 1    [304] => 1    [207] => 1    [978] => 1    [232] => 1    [618] => 1    [834] => 1    [472] => 1    [839] => 1    [377] => 1    [788] => 1)
Copy after login

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template