PHP алгоритм для получения случайного числа n-го числа в заданном диапазоне

Мне нужен некоторый алгоритм PHP для получения случайного числа в заданном диапазоне с конкретным входным числом.

Например, когда диапазон от 0 до 1000. Мой входной номер равен 23. Когда я выполняю этот алгоритм. Я хочу точное магическое число 23 в данном диапазоне.

Кроме того, всегда я хочу один и тот же номер выхода для номера входа в заданном диапазоне.

Пример шаблона моей функции PHP

function getMagicNumber($input, $min, $max) {
// algorithm work
return $output;
}

echo getMagicNumber(23, 0, 1000); // 561

Кроме того, я проверил это с mt_srand а также mt_rand, Но эти функции работают как циклический процесс. Итак, эти функции небезопасны, когда я использую диапазон в миллиардах.

Возможно ли это без петли? Если возможно, пожалуйста, помогите мне с этим алгоритмом.

Я работаю над этим с 2 дней. Но это все еще не решено.

Это мой текущий алгоритм:

<?php

function getMagicNumber($input, $min, $max)
{
$return = false;
// Optimize input params
list($input, $min, $max) = [intval($input), intval($min), intval($max)];
// Check input params
if ($min < $max && $input >= $min && $input <= $max) {
// Create range
$range = range($min, $max);
// Define some seed value
mt_srand(5);
// Loop process
for ($a = count($range) - 1; $a > 0; $a--) {
$b = @mt_rand(0, $a);
// Get data
list($x, $y) = [$range[ $a ], $range[ $b ]];
// Swap data
$range[ $a ] = $y;
$range[ $b ] = $x;
}
// Extract output
$return = $range[ $input ];
}

return $return;
}

echo getMagicNumber(23, 0, 50); // 18

Примечание: никакие два выходных значения входных значений не совпадают друг с другом.

-1

Решение

Способ получения случайных чисел — последовательные звонки mt_rand, Вы не можете сказать ему, чтобы дать вам n-е число в его случайной таблице. Таким образом, вы не можете сделать это без какой-либо формы зацикливания.

Если ваши значения $ max не сильно меняются, вы можете сохранить числовую последовательность, но это также кажется плохим решением.

Если вы хотите просто свой код, вы можете сделать это:

function getMagicNumber($input, $min, $max)
{
$input = $input < $min ? $min : ($input > $max ? $max : $input);
mt_srand(5);
$result = null;
for ($i = $max; $i >= $input; $i--) {
$result = mt_rand(0, $i);
}
return $result;
}

echo getMagicNumber(23, 0, 50); // 18
0

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

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

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