Как сгенерировать случайное число из заданного набора значений?

int main()
{
    srand(time(NULL));
    int r=rand();
}

Вышеупомянутая функция может генерировать любое число, но что, если я хочу сгенерировать число из заданного набора значений.
Например, если я хочу сгенерировать число случайным образом, но ТОЛЬКО из значений 4,6,1,7,8,3.
Есть ли какие-либо способ добиться этого?

Любая помощь будет оценена.


person kevin gomes    schedule 17.07.2014    source источник
comment
rand() может быть совершенно плохим: stackoverflow.com/questions/24005459/   -  person Deduplicator    schedule 17.07.2014


Ответы (4)


Все очень просто. Создайте массив. который имеет желаемые результаты (4,6,1,7,8,3). Затем выберите случайную корзину в массиве. % 6 в основном выбирает значения 0 - 5, которые являются индексами в вашем массиве.

int main()
{
    srand(time(NULL));
    int myArray[6] = { 4,6,1,7,8,3 };
    int randomIndex = rand() % 6;
    int randomValue = myArray[randomIndex];
}

Некоторая информация о том, как вы можете манипулировать rand() дальше.

rand() % 7 + 1

Объяснение:

  • rand () возвращает случайное число от 0 до большого числа.

  • % 7 получает остаток от деления на 7, которое будет целым числом от 0 до 6 включительно.

  • 1 изменяет диапазон от 1 до 7 включительно.

person progrenhard    schedule 17.07.2014
comment
вы имеете в виду r = myArray[rand()%6] правильно? иначе зачем ты определил muArray? - person chouaib; 18.07.2014
comment
@chouaib исправил это, чтобы было понятнее, спасибо. Я немного поленился. - person progrenhard; 18.07.2014

Если у вас есть предопределенный набор значений, которые вы хотите выбрать случайным образом, поместите их в массив и используйте rand, чтобы получить индекс в массиве.

См., Например, этот старый ответ SO о том, как получить случайное число в диапазоне (т.е. между нулем и размером массива для вашего кейс).

person Some programmer dude    schedule 17.07.2014

Вы можете получить список случайных значений, которые хотите, и сохранить их в массиве. Затем вы можете выбрать случайное число из диапазона списка и выбрать местоположение по указанному индексу.

person user2548635    schedule 17.07.2014

Вы можете разделить случайное число и взять только оставшееся. использовать как индекс массива ваших желаемых чисел

Например, если вы возьмете (случайное число% 3), вы получите 0,1,2, поэтому вы можете использовать массив из 3 желаемых чисел

person Gil.I    schedule 17.07.2014