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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Генерация случайных чисел с заданной суммой 
V
    Опции темы
Winterlord
Дата 18.12.2011, 12:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Добрый день, уважаемые Знатоки!

Возник следующий вопрос:

Имеется какое-то число  b типа double. Нужно случайно сгенерировать 3 числа так, чтобы их сумма была равна или, в самом крайнем случае, почти равна (различалась не более, чем на 1) числу b.
Вот что я написал:

Код

 Random r = new Random();
               double b = 66.66;               

               double number1=0;
               double number2=0;
               double number3=0;
               
                do
               {
                number1 = r.Next(0, b);
                number2 = r.Next(0, b);
                number3 = r.Next(0, b);
               }
                while ( (number1+number2+number2) != b);


Это работает слишком долго и не рационально. Подскажите пожалуйста, возможно это написать более просто? Может быть не стоит генерировать случайные числа, а нужно как-то разделить число b на 3 части? Заранее благодарен за ответы ! smile
PM MAIL ICQ   Вверх
Экскалупатор
Дата 18.12.2011, 23:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

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



опиши для чего это нужно. если просто что бы получить три числа, то можно просто сгенерировать первое число(любое) один раз, ну можно взять из диапазона от 0 до b, т.е. это одно действие, потом можно взять второе число из диапазона от 0 до b-первое число, потом их сложить и вычесть из b, получив третье число. возможно придется немного пошаманить с интервалами что бы не попадать в ситуации когда выпадает 0 или b(к примеру можно взять 0+n и b-n). но это уже детали.

если же задача в чем то другом, то скажи в чем, возможно тогда и другое решение понадобится(а может и нет)
PM MAIL ICQ   Вверх
Winterlord
Дата 21.12.2011, 01:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Экскалупатор, Большое спасибо! Примерно так и сделалsmile
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

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


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

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


 




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


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

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