[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: рандом
quickxyan
пробовал сделать через гото, но он только в самых новых версиях(



Спустя 2 минуты, 20 секунд (15.11.2010 - 10:18) twin написал(а):
подробнее. вообще неповторяющиеся или в рамках одного запуска скрипта?

Спустя 6 минут, 44 секунды (15.11.2010 - 10:24) kirik написал(а):
quickxyan
радндом - он на то и рандом, что ты не знаешь какое число будет следующее. А если ты на этот процесс как-то влияешь - это уже не рандом.

Спустя 3 минуты, 7 секунд (15.11.2010 - 10:28) Йакуд написал(а):
Есть формула для генерации псевдослучайной последовательности.
x[n+1] = (a * x[n] + c) mod m;

Где a, m и x[0] могут принимать произвольные целые значения, за исключением 0. C может быть также и 0.
Можно написать класс или функцию для генерации такой последовательности.

P.S.
Такие последовательности очень удобно применять, к примеру, в онлайн играх. Где нужно на сервере и клиенте одновременно генерировать что-либо. Будь то расположение деревьев на локации или путь ИИ от одной до другой точки. Все это можно сделать без лишней передачи данных.

Спустя 23 минуты, 25 секунд (15.11.2010 - 10:51) quickxyan написал(а):
один запуск скрипта! я хотел выложить кусок кода, но щас шото голова непашет)

надо масив чисел из 10 элементов заполнить числами от 1 до 10 в разброс!

2 Йакуд - нужны рамки от такого то числа - по такое то! например: 1-10

Спустя 12 минут, 46 секунд (15.11.2010 - 11:04) Йакуд написал(а):
quickxyan, сказал бы сразу, что тебе нужно. А то я тут уже собрался класс писать для генерации последовательностей.
Твою задачу можно решить очень просто.
<?
/*
* Твой массив, в который попадут случайные числа
*/

$array = array();

for($i = 0; $i < 10; $i ++){
$rnd = rand()%10+1;
$in_array = 1;

while($in_array){
if(!in_array($rnd, $array)){
$array[] = $rnd;
$in_array = 0;
}else{
$rnd = rand()%10+1;
}
}
}


/*
* Рисуем массив.
*/

?><pre><?
print_r($array);
?></pre>

Спустя 36 минут, 10 секунд (15.11.2010 - 11:40) quickxyan написал(а):
спасибо большое! работает! правда щас в код углубляться не буду так как уже говорил, что-то не думаеться)

Спустя 10 минут, 45 секунд (15.11.2010 - 11:51) Йакуд написал(а):
/*
* Твой массив, в который попадут случайные числа
*/

$array = array();

//Цикл
for($i = 0; $i < 10; $i ++){
//Генерация случайного числа от 1 до 10
$rnd = rand()%10+1;
$in_array = 1;

//Выполнять код в теле функции, пока $in_array == 1
while($in_array){
//Если сгенерированное число не в массиве
if(!in_array($rnd, $array)){
//Добавляем число
$array[] = $rnd;
//Останавливаем цикл
$in_array = 0;
}else{//Если число в массиве
//Генерируем новое

$rnd = rand()%10+1;
}
}
}

Откомментил тебе код. Если помог, можешь плюсануть ^_^..

Спустя 57 минут, 24 секунды (15.11.2010 - 12:48) twin написал(а):
Вот это тот случай, когда do... while был бы уместен:
function getRandom()
{
static $tmp = array();

do
{
$num = rand(1, 10);
}
while(count($tmp) < 10 && in_array($num, $tmp));

$tmp[] = $num;

return $num;
}

echo getRandom();
echo getRandom();
echo getRandom();


Первые 10 никогда не повторятся.

Спустя 4 часа, 37 минут, 38 секунд (15.11.2010 - 17:26) quickxyan написал(а):
Йакуд, спасибо за коменты, а то я кое-что хотел спросить, а тут оп и все описано biggrin.gif
и еще, я тоже задумывался над таким способом, но когда сел реализовывать, то запутался и забил(


twin, тоже спасибо все работает и все предельно ясно)


Думаю на этом тему можно какбэ закрыть)

Спустя 3 часа, 49 минут, 5 секунд (15.11.2010 - 21:15) kirik написал(а):
Цитата (quickxyan @ 15.11.2010 - 02:51)
надо масив чисел из 10 элементов заполнить числами от 1 до 10 в разброс!
Цитата (Йакуд @ 15.11.2010 - 03:04)
Твою задачу можно решить очень просто.

Мьсьё знает толк в извращениях :)
$array = range(1,10);
shuffle($array);

print_r($array);



_____________
печатаю со скоростью 320 минут в знак...

плюсуем карму не стесняемся
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.