Форум программистов, компьютерный форум CyberForum.ru

Рандом с исключением - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
bupal
25 / 25 / 2
Регистрация: 30.03.2010
Сообщений: 343
Записей в блоге: 1
26.11.2011, 14:02     Рандом с исключением #1
Добрый день...
подскажите пожалуйста..как сделать целочисленный рандом от 1 до N, но при этом чтобы в нём исключалось заданное число
к примеру если заданное число = 3, а N = 9
то рандом должен проводится в диапазоне 1,2,4,5,6,7,8,9
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.11.2011, 14:02     Рандом с исключением
Посмотрите здесь:

рандом C++
Рандом C++
рандом C++
C++ Очередь с приоритетным исключением на основе односвязного списка
C++ повторить введенные символы, за исключением десятичных символов
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Net_Wanderer
235 / 208 / 19
Регистрация: 08.06.2011
Сообщений: 467
26.11.2011, 14:10     Рандом с исключением #2
C
1
2
3
4
5
6
7
8
9
10
11
int myrand(int low, int high, int exc)
{
    int n;
 
    while ((n = low + rand() % (high - low + 1)) == exc)
        ;
    return n;
}
 
/* ... */
myrand(1, 9, 3)
odip
Эксперт C++
 Аватар для odip
7225 / 3287 / 58
Регистрация: 17.06.2009
Сообщений: 14,165
26.11.2011, 17:09     Рандом с исключением #3
Можно проще
Генерируем случайное число A - от 1 до 8
если получилось 1<=A<=2 то вернем его
если получилось 3<=A<=8 то вернем A+1

В этом случае не будет лишних вызовов rand()

Добавлено через 1 минуту
В общем случае
Пусть заданное число - это B
Генерируем случайное число A от 1 до N-1
Если A<B то вернем A
Если A>=B то вернем A+1
Очевидно что B мы никогда не вернем
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
26.11.2011, 17:54     Рандом с исключением #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <random>
#include <iostream>
#include <cstdlib>
 
int main()
{
   const int first = 1;
   const int second = 9;
   const int no = 3;
   std::mt19937 gen(time(0));
   std::uniform_int_distribution<> dist(first, second);
   int value = dist(gen);
   while(value == no)
   {
       value = dist(gen);
   }
   std::cout << value << std::endl;
}
Yandex
Объявления
26.11.2011, 17:54     Рандом с исключением
Ответ Создать тему
Опции темы

Текущее время: 20:25. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru