Уникальный рандом(rand_mt)

Программирование, которое не связано с API.
aydar
Сообщения: 57
Зарегистрирован: 09 сен 2010, 18:22

Уникальный рандом(rand_mt)

Сообщение aydar »

привет. :)
Как сделать чтобы генератор не выдавал одинаковых чисел?
мне нужно 25 чисел, из рандома (уникальных!) (я знаю как сделать, но чет хромает(хромает тем что все равно выдает от 1-3 одинаковых, (это когда 25 чисел, а при например 5, все отлично))).
Делаю так:

Код: Выделить всё

 //первое число$first = mt_rand(1,100); //рандомим //второе число$second = mt_rand(1,100); //рандомимif($first=$second)    //Смотрим, если первое число совпадает со вторым, то рандомим дальше {$second = mt_rand(1,100);} //третье число$thirth = mt_rand(1,100); //рандомимif($thirth=$first or $thirth=$second)    //Смотрим, если число совпадает с первым или со вторым, то рандомим дальше {$thirth = mt_rand(1,100);}.....(аналогично другие)echo $first, $second, $thirth......; //выводим числа 
:geek:
Noise Gate
Сообщения: 691
Зарегистрирован: 28 апр 2010, 12:34

Re: Уникальный рандом(rand_mt)

Сообщение Noise Gate »

тебе именно от 1 до 100 надо?
Аватара пользователя
bodnar
Модератор
Модератор
Сообщения: 1399
Зарегистрирован: 03 апр 2010, 06:41

Re: Уникальный рандом(rand_mt)

Сообщение bodnar »

ну ты извращенец :lol:

Код: Выделить всё

 for ($i=0; $i<100; $i++){$array[]=mt_rand(1,100);}   for ($i=1; $i<100;$i++){p=true;while (p){$p=false;for ($j=0; $j<$i;$j++){if ($array[$i]==$array[$j]){$i=mt_rand(1,100); $p = true;}}}}  
как то так должно работать, проверять лень))
Noise Gate
Сообщения: 691
Зарегистрирован: 28 апр 2010, 12:34

Re: Уникальный рандом(rand_mt)

Сообщение Noise Gate »

можно еще проще:

Код: Выделить всё

do {    mt_srand();    $random_array[mt_rand(1, 100)] = 1;} while (count($random_array) < 25);
На выходе получим массив, у которого ключи и будут необходимыми рандомными числами:
http://codepad.org/LRe0VaeJ
Аватара пользователя
bodnar
Модератор
Модератор
Сообщения: 1399
Зарегистрирован: 03 апр 2010, 06:41

Re: Уникальный рандом(rand_mt)

Сообщение bodnar »

оу еее, крутой метод :-)
Noise Gate
Сообщения: 691
Зарегистрирован: 28 апр 2010, 12:34

Re: Уникальный рандом(rand_mt)

Сообщение Noise Gate »

bodnar
обращайся =) в PHP у меня большой опыт)
Аватара пользователя
Doker
Модератор
Модератор
Сообщения: 1026
Зарегистрирован: 07 май 2010, 18:53

Re: Уникальный рандом(rand_mt)

Сообщение Doker »

Как сделать чтобы редомно выбиралось из заведомо указаных чисел например:
Нужено выбрать и чисел 200,159,589,41,326,1,65 одно число. Рендомно. Как это реализовать? В пхп не шарю =(
Noise Gate
Сообщения: 691
Зарегистрирован: 28 апр 2010, 12:34

Re: Уникальный рандом(rand_mt)

Сообщение Noise Gate »

Код: Выделить всё

$random_array = array(200,159,589,41,326,1,65);shuffle($random_array);$random_number = $random_array[0];
или для пущей рандомности:

Код: Выделить всё

$random_number = $random_array[mt_rand(0, count($random_array))];
aydar
Сообщения: 57
Зарегистрирован: 09 сен 2010, 18:22

Re: Уникальный рандом(rand_mt)

Сообщение aydar »

Спасибо :!:
Подскажите еще пожалуйста, как например первое значение, присвоить переменной (напрмер)
$first = 'первое сгенерированное' ;
Noise Gate
Сообщения: 691
Зарегистрирован: 28 апр 2010, 12:34

Re: Уникальный рандом(rand_mt)

Сообщение Noise Gate »

Надо "обратить" массив и взять необходимые значения:

Код: Выделить всё

$tmp_array = array_keys($random_array);$first = $tmp_array[0];$second = $tmp_array[1];...
Ответить