Heim  >  Artikel  >  Backend-Entwicklung  >  已知n个数的和是32898,求每一个加数,求完美版

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

WBOY
WBOYOriginal
2016-06-23 13:27:551083Durchsuche

原帖已经结贴。只是获得的结果并不完美,总是最大数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;}


请修复这个问题,谢谢。


回复讨论(解决方案)

$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)

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn