![]() |
Модераторы: Partizan, gambit |
![]() ![]() ![]() |
|
DrDrag |
|
|||
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 8.4.2008 Репутация: нет Всего: нет |
Всем привет.
Возник такой вопрос. Нужно равновероятно получить число внутри нескольких диапазонов. Например есть несколько, заранее неизвестное, кол-во разных диапазонов. 5-20, 27-30, 120-199; Хранятся в листе структур пар:
Нужно получить случайное число в этих диапазонах. У меня есть 2 решения. Первое - создать лист byte и поместить туда все значения от min до max. Потом взять случайное число от 0 до количества элементов в листе и по индексу взять значение. Второе - в while(true) // позор ли мне? напоминает обезьянью сортировку получать случайное число, потом проверять, попало ли оно хоть в 1 диапазон. Если попало - брейк. Оба решения кажутся, как бы сказать, кривыми. Как сделать что бы было красиво? = ) |
|||
|
||||
infarch |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 526 Регистрация: 13.3.2009 Репутация: 1 Всего: 1 |
Может быть так:
Сначала оптимизируем список диапазонов на предмет перекрывающихся (если такое возможно). Потом случайно выбираем диапазон, а уже в нем случайно число. |
|||
|
||||
DarkDragon |
|
|||
![]() GradVin ![]() ![]() Профиль Группа: Участник Сообщений: 296 Регистрация: 19.8.2006 Репутация: нет Всего: 8 |
Мне кажется первый метод приемлимым, но только не список а memory stream, заполнить его последовательно числами из диапазонов (отсеивая дублирующие значения), и получать лишь случайный индекс (в данном контексте смещение).
Ну и метод двойного случайного числа описанный infarch |
|||
|
||||
Machaon |
|
|||
![]() КаРолЬ АсьКи МуАЛя ![]() Профиль Группа: Участник Сообщений: 160 Регистрация: 12.8.2008 Где: М.о. Красногорск Репутация: 3 Всего: 3 |
Вот набросал пару строчек :
|
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |