Генерирование случайных чисел от -n до n в C

Я хочу генерировать случайные числа от -n до n, исключая 0. Может ли кто-нибудь предоставить мне код в C? Как исключить 0?

3 ответа

Одной из идей может быть создание случайного числа x в диапазоне [1,2n] включительно. Затем верните -(x - n) для x больше, чем n, иначе просто верните x.

Это должно работать:

int my_random(int n)
{
 const int x = 1 + rand() / (RAND_MAX / (2 * n) + 1);
 return x > n ? -(x - n) : x;
}

Обратитесь к comp.lang.c FAQ для получения дополнительной информации о том, как безопасно использовать rand(); это объясняет вышеупомянутое использование.


Самое простое, что я могу предложить, это создать случайное число между 0 и 2n, а затем выполнить математический трюк:

result= n - randomNumber

Хотя 0 может быть очень маловероятным, вы можете проверить это, используя If и повторить генерацию случайных чисел.


int random(int N) 
{ 
 int x;
 do{
 x=rand()%(N*2+1)-N;
 }while(x==0);
 return x;
}

Он выбирает число от -N до N, но продолжает делать это, если оно равно 0.

Альтернатива, как предложено в комментариях, генерирует число между -N и N-1 и увеличивает его, если его положительный или 0:

int random(int N) 
{ 
 int x; 
 x=rand()%(N*2)-N;
 if(x>=0) x++;
 return x;
}

licensed under cc by-sa 3.0 with attribution.