Get different values for each number

24 Views Asked by At

I am trying to get some type of values like this.

Value: 200
Days: 35

Division: Value/Days = 5.714 for the total 35 days

I am getting fixed value for each day using this way, but I actually want to get different value for each day like:

Division: Value/Days = 5.714

Day 1: 5.714
Day 2: 4.5
Day 3: 6.1
Day 4: 3.4
Day 5: 2
Day 6: 5.1

And so on for the total of 35 days.

How can I achieve this goal? Is there any way to do so? I am really null in mathematics so i really need an idea from the experts.

Note: I want to acheive this in PHP.

1

There are 1 best solutions below

12
On BEST ANSWER

Example code:

<?php
function gen_value($day, $days_count, $desired_sum, $prev_values) {
  if ($day == 1) {
    return $desired_sum/$days_count + $desired_sum/$days_count*0.2*rand(-100, 100)/100;
  } elseif ($day < $days_count) {
    $diff = ($desired_sum/$days_count - array_sum($prev_values)/count($prev_values));
    $sign = $diff > 0 ? 1 : -1;
    return abs($desired_sum/$days_count + ($diff +
      $desired_sum/$days_count*0.2*$sign)*rand(0, 200)/100);
  } else {
    return 200 - array_sum($prev_values);
  }
}

$len = 35;
$desired_sum = 200;

$arr = array();

for ($i = 0; $i < $len; ++$i) {
  $arr[] = gen_value($i + 1, $len, $desired_sum, $arr);
}

for ($i = 0; $i < $len; ++$i) {
  print("$arr[$i]\n");
}
$sum = array_sum($arr);
print("sum = $sum");

Result:

5.3142857142857
8.5377142857143
2.4178857142857
...
6.1704160030257
sum = 200