Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Случайное число в нескольких диапазоне 
:(
    Опции темы
DrDrag
Дата 26.2.2013, 01:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 8.4.2008

Репутация: нет
Всего: нет



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

struct pair {
byte min;
byte max;
}

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

Оба решения кажутся, как бы сказать, кривыми. Как сделать что бы было красиво? = )
PM MAIL   Вверх
infarch
Дата 26.2.2013, 10:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 526
Регистрация: 13.3.2009

Репутация: 1
Всего: 1



Может быть так:

Сначала оптимизируем список диапазонов на предмет перекрывающихся (если такое возможно).
Потом случайно выбираем диапазон, а уже в нем случайно число.
PM MAIL   Вверх
DarkDragon
Дата 11.3.2013, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GradVin
**


Профиль
Группа: Участник
Сообщений: 296
Регистрация: 19.8.2006

Репутация: нет
Всего: 8



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

Ну и метод двойного случайного числа описанный infarch
PM MAIL   Вверх
Machaon
Дата 9.4.2013, 04:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


КаРолЬ АсьКи МуАЛя
*


Профиль
Группа: Участник
Сообщений: 160
Регистрация: 12.8.2008
Где: М.о. Красногорск

Репутация: 3
Всего: 3



Вот набросал пару строчек :
Код

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();



PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0821 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.