Создать номер. Проверьте его значение, если число равно 3, генерирует другое. Если это не 3, используйте его.
EDIT: Мышление перед кофе - ужасный план. Если вы хотите получить каждое число в диапазоне в произвольном порядке, я согласен с тем, что другие говорят о перетасовках. Если, однако, вам нужно какое-то случайное подмножество диапазона, я бы сохранил список запрещенных значений. Перемешивание и получение только первых чисел n также подходят, если диапазон не очень большой (например, не что-то вроде 0 < x < INT_MAX).
Каждый раз, когда вы создаете число, проверяйте, если сгенерированное число находится в запрещенном списке, а если оно есть, сгенерируйте другое число. Каждый раз, когда вы создаете действительный номер, вы добавляете его в список, чтобы обеспечить, чтобы сгенерированные числа были уникальными. Список также должен быть инициализирован вашими нежелательными номерами (3 в приведенном примере).
Я думаю, что для случайного числа выход «мог», а не «должен». – Marc
В стороне - уникальные и случайные несовместимы. Случайный выбор имеет ту же вероятность выбора 8 независимо от того, что номер 8 был только что выбран ранее. Большинство предоставленных ответов будут содержать дубликаты. Вам нужен алгоритм перетасовки колоды (как в колоде карт). @ Ответ Джони - единственная тасовка, которую я видел до сих пор. –
Здесь нуждаются алгоритмы Фишера-Йейта или Флойда. – ChronoTrigger