09.06.2017, 15:30
(
Последний раз редактировалось White_116; 09.06.2017 в 16:25.
)
Это конечно всё рабочие варианты, но можно словить рекурсию. Чтобы не словить рекурсию есть и такой вариант.
Минус: выделяемая память, точно не для больших диапазонов.
Плюс: отсутствие рекурсии и получение рандомного числа во всех случаях.
P.S. подправил код.
Минус: выделяемая память, точно не для больших диапазонов.
Плюс: отсутствие рекурсии и получение рандомного числа во всех случаях.
PHP код:
#include <a_samp>
#define InitRandomNumberArr(%0,%1) new %1[%0+1]; ReInitRandomNumberArr(%1, %0+1)
stock ReInitRandomNumberArr(rand_arr[], size = sizeof(rand_arr))
{
for(new i = size; i--;)
{
rand_arr[i] = i;
}
}
stock GetRandomNumberFromArr(rand_arr[], size = sizeof(rand_arr))
{
if(rand_arr[--size] == 0)
{
return -1;
}
new num = random(rand_arr[size]);
new r_num = rand_arr[num];
rand_arr[num] = rand_arr[--rand_arr[size]];
return r_num;
}
public OnFilterScriptInit()
{
new rand_array[6];
InitRandomNumberArr(10, tmp_arr_rand_num);
for(new i = 0; i < sizeof(rand_array); i++)
{
rand_array[i] = GetRandomNumberFromArr(tmp_arr_rand_num);
printf("rand_array[%d] = %d", i, rand_array[i]);
}
ReInitRandomNumberArr(tmp_arr_rand_num);
for(new i = 0; i < sizeof(rand_array); i++)
{
rand_array[i] = GetRandomNumberFromArr(tmp_arr_rand_num);
printf("rand_array2[%d] = %d", i, rand_array[i]);
}
return 1;
}