C / Генерировать случайное число от 1 до 4, исключая 3 с помощью arc4random ()? - PullRequest
0 голосов
/ 22 ноября 2011

У меня есть

int y = (arc4random()%4)+1;

Таким образом, он генерирует случайное число от 1 до 4.

Я хотел спросить, есть ли способ опустить число 3, поэтому только цифры 1, 2и у 4 есть шанс быть сгенерированным.

Спасибо!

Ответы [ 5 ]

9 голосов
/ 22 ноября 2011

Вы всегда можете сделать случайное число 0-2 (arc4random() % 3) и использовать это число с 2 в качестве степени:

2^0 = 1
2^1 = 2
2^2 = 4

, и там вы получили случайное число от 1-4 без 3.В С:

int y = 1 << (arc4random() % 3);
9 голосов
/ 22 ноября 2011
int allowdNumbers[3] = {1, 2, 4}
int index = arc4random()%3;

int number = allowdNumbers[index];
1 голос
/ 22 ноября 2011

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

int y = 1 << arc4random_uniform(3);

Если вы хотите пропустить 3 по какой-то другой причине, то это, вероятно, больше запутает то, что вы делаете, чем. В этом случае будет достаточно чего-то более простого.

do {
    int y = arc4random_uniform(4) + 1;
} while (y == 3);
1 голос
/ 22 ноября 2011

Создайте случайное число от 0 до количества различных имеющихся у вас чисел (исключая, а в вашем случае 3) и распределите результат в соответствии с вашими предпочтениями.В вашем случае:

int y = (rand() % 3) + 1;

if (y == 3)
    y++;
0 голосов
/ 22 ноября 2011

Вы можете сделать это:

int y = (arc4random()%3)+1;
if (y == 3) y =4;

Хотя вам следует использовать arc4random_uniform вместо оператора по модулю.

...