Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Случайное число в нескольких диапазоне


Автор: DrDrag 26.2.2013, 01:24
Всем привет. 
Возник такой вопрос. Нужно равновероятно получить число внутри нескольких диапазонов.
Например есть несколько, заранее неизвестное, кол-во разных диапазонов.
5-20, 27-30, 120-199;
Хранятся в листе структур пар:
Код

struct pair {
byte min;
byte max;
}

Нужно получить случайное число в этих диапазонах.
У меня есть 2 решения. Первое - создать лист byte и поместить туда все значения от min до max. Потом взять случайное число от 0 до количества элементов в листе и по индексу взять значение.
Второе - в while(true) // позор ли мне? напоминает обезьянью сортировку
получать случайное число, потом проверять, попало ли оно хоть в 1 диапазон. Если попало - брейк.

Оба решения кажутся, как бы сказать, кривыми. Как сделать что бы было красиво? = )

Автор: infarch 26.2.2013, 10:57
Может быть так:

Сначала оптимизируем список диапазонов на предмет перекрывающихся (если такое возможно).
Потом случайно выбираем диапазон, а уже в нем случайно число.

Автор: DarkDragon 11.3.2013, 13:44
Мне кажется первый метод приемлимым, но только не список а memory stream, заполнить его последовательно числами из диапазонов (отсеивая дублирующие значения), и получать лишь случайный индекс (в данном контексте смещение). 

Ну и метод двойного случайного числа описанный infarch

Автор: Machaon 9.4.2013, 04:10
Вот набросал пару строчек :
Код

int[,] pair = { 
    {5, 20},
    {23, 47},
    {120, 199},
    {201, 427}
};


Random rnd = new Random();

int min = rnd.Next(0, pair.GetLength(0));
result.Text = rnd.Next(pair[min, 0], pair[min, 1]).ToString();



Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)