Advertisement
Guest User

Untitled

a guest
Jul 2nd, 2015
155
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.58 KB | None | 0 0
  1. function array_rand_with_sum($min, $max, $sum, $num)
  2. {
  3. $a = array();
  4. if ($max*$num > $sum && $min < $sum$num)
  5. {
  6. do
  7. {
  8. for($i = 0; $i < $num; $i ++)
  9. {
  10. $a[$i] = mt_rand($min, $max);
  11. }
  12. }
  13. while(array_sum($a) != $sum);
  14. return $a;
  15. }
  16. else { return "Ошибка! Проверьте входные данные."; }
  17. }
  18.  
  19. array_rand_with_sum(1, 1000, 10000, 200);
  20.  
  21. function array_rand_with_sum($min, $max, $sum, $num)
  22. {
  23. if ($num <= 0 || $max * $num < $sum || $min * $num > $sum) {
  24. return "Ошибка! Проверьте входные данные.";
  25. }
  26. if ($num == 1) {
  27. return [$sum];
  28. }
  29. $rand = mt_rand(
  30. max($min, $sum - $max * ($num - 1)),
  31. min($max, $sum - $min * ($num - 1))
  32. );
  33. $res = array_rand_with_sum($min, $max, $sum - $rand, $num - 1);
  34. $res[] = $rand;
  35. return $res;
  36. }
  37.  
  38. $res = array_rand_with_sum(1, 1000, 10000, 200);
  39. if (is_array($res)) {
  40. var_dump([
  41. 'min' => min($res),
  42. 'max' => max($res),
  43. 'sum' => array_sum($res),
  44. 'count' => count($res),
  45. ]);
  46. }
  47. var_dump($res);
  48.  
  49. function array_rand_with_sum($min, $max, $sum, $num)
  50. {
  51. $return = array();
  52. $newsum = $sum;
  53. for($i=0;$i<$num;$i++) {
  54. $c = rand($min,($max<$newsum)?$max:$newsum);
  55. $newsum -= $c;
  56. $return[]= $c;
  57. }
  58. $array_sum = array_sum($return);
  59. arsort($return);
  60. if($array_sum>$sum) {
  61. $return[0]-= ($array_sum-$sum);
  62. } else {
  63. $return[count($return)-1]+= ($sum-$array_sum);
  64. }
  65. return $return;
  66. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement