Случайное число по нескольким точкам в порядке убывания

Мне нужно распределить число по нескольким точкам в ухудшенном порядке.

Например,

N = 100 // this 100 is fixed
no_of_points = 10 // no of points will vary

Нужно разбить 100 на 10 баллов в порядке убывания СЛУЧАЙНЫМ ОБРАЗОМ.

например:

80, 55, 32, 18, 10, 10, 10, 8, 2, 0

Вот,

  1. деградация будет быстрее к концу
  2. Должен содержать ноль до конца

Я пытаюсь сделать что-то вроде:

private static function generateRandomPercentage($no_of_points)
{
$distributions = [];

// need to start from 80
// but it may vary also

$max = mt_rand(80, 81);
$ratio = $max / $no_of_points;

for( $i = 1; $i <= $no_of_points; $i++ ) {
$delta = ($ratio * $i);
$distributions[] = round(($max - $delta) / 100, 2);
}

print_r($distributions);
}

Но ничего не работает.
Пожалуйста, помогите мне.

0

Решение

Может быть сделано с помощью стандартных функций PHP:

$N = 100 // this 100 is fixed
$no_of_points = 10 // no of points will vary

$distributions= rsort(array_slice(shuffle(range(1,$N)), 0, $no_of_points);
print_r($distributions));

range = создать массив со значениями 1 … n

shuffle = тасовать массив

array_slice = вернуть часть массива

rsort = сортировать значения массива от высокого до низкого значения

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]