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


Автор: Winterlord 18.12.2011, 12:14
Добрый день, уважаемые Знатоки!

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

Имеется какое-то число  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

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

если же задача в чем то другом, то скажи в чем, возможно тогда и другое решение понадобится(а может и нет)

Автор: Winterlord 21.12.2011, 01:09
Экскалупатор, Большое спасибо! Примерно так и сделалsmile

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