Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function array_rand_with_sum($min, $max, $sum, $num)
- {
- $a = array();
- if ($max*$num > $sum && $min < $sum$num)
- {
- do
- {
- for($i = 0; $i < $num; $i ++)
- {
- $a[$i] = mt_rand($min, $max);
- }
- }
- while(array_sum($a) != $sum);
- return $a;
- }
- else { return "Ошибка! Проверьте входные данные."; }
- }
- array_rand_with_sum(1, 1000, 10000, 200);
- function array_rand_with_sum($min, $max, $sum, $num)
- {
- if ($num <= 0 || $max * $num < $sum || $min * $num > $sum) {
- return "Ошибка! Проверьте входные данные.";
- }
- if ($num == 1) {
- return [$sum];
- }
- $rand = mt_rand(
- max($min, $sum - $max * ($num - 1)),
- min($max, $sum - $min * ($num - 1))
- );
- $res = array_rand_with_sum($min, $max, $sum - $rand, $num - 1);
- $res[] = $rand;
- return $res;
- }
- $res = array_rand_with_sum(1, 1000, 10000, 200);
- if (is_array($res)) {
- var_dump([
- 'min' => min($res),
- 'max' => max($res),
- 'sum' => array_sum($res),
- 'count' => count($res),
- ]);
- }
- var_dump($res);
- function array_rand_with_sum($min, $max, $sum, $num)
- {
- $return = array();
- $newsum = $sum;
- for($i=0;$i<$num;$i++) {
- $c = rand($min,($max<$newsum)?$max:$newsum);
- $newsum -= $c;
- $return[]= $c;
- }
- $array_sum = array_sum($return);
- arsort($return);
- if($array_sum>$sum) {
- $return[0]-= ($array_sum-$sum);
- } else {
- $return[count($return)-1]+= ($sum-$array_sum);
- }
- return $return;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement