Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Delphi: Общие вопросы > Случайные числа |
Автор: Rondo 11.5.2006, 15:26 |
есть 4 случайных числа в диапозоне 1..9, как сделать чтобы они были случайными но их сумма была равна допустим 27? например 9981 = 27 6489= 27 ![]() |
Автор: _hunter 11.5.2006, 15:36 |
создай массив таких чисел (сумма цифр в котором == 27) и выбирай число из этого массива. |
Автор: Yanis 11.5.2006, 15:47 |
Вот Delphi то под рукой нету... 4 раза отнимай от 27 числа из диапозона от 1 до 9, к одному из 4-х чисел прибавить разность 27 и 4-х найденых... Вроде ничего не напутал ![]() |
Автор: Guedda 11.5.2006, 15:51 | ||
|
Автор: Ripper 11.5.2006, 16:00 | ||
Типа того т.е. пока не будет равно 27 запомлять эти случайные числа |
Автор: _hunter 11.5.2006, 16:08 |
а вас (обоих) не смущает то, что в худшем случае этот цикл несколько лет выполняться будет? |
Автор: Alexeis 11.5.2006, 16:17 |
_hunter, код Ripper у меня сработал за несколько итераций! Добавлено @ 16:19 У Guedda, явно опечатка (даже не компилируется) |
Автор: Yanis 11.5.2006, 16:32 |
Всё равно это не выход. Нужно генерировать, а не подбирать. |
Автор: Rondo 11.5.2006, 16:39 |
Мне надо чтобы он сразу выкидывал числа суммой 27 ![]() |
Автор: Yanis 11.5.2006, 16:41 |
см. post 3 |
Автор: _hunter 11.5.2006, 16:43 |
alexeis1, -- повезло ![]() Rondo, засунь код в функцию -- будет сразу выкидывать |
Автор: Rondo 11.5.2006, 17:30 | ||
Спасибо Yanis, твой способ помог ![]() Вот что получилось:
|
Автор: Snowy 11.5.2006, 17:41 | ||
Ндя. Способ не очень. Так и вижу результат 1 + 1 + 1 + 24 Добавлено @ 17:42 Даже простой перебор и то приличней.
|
Автор: Rondo 11.5.2006, 17:43 |
Да, я только что хотел об этом спросить ![]() ![]() |
Автор: Yanis 11.5.2006, 17:55 |
А что этот вариант не подходит под условие? |
Автор: Rondo 11.5.2006, 17:56 | ||
Нужен не перебор а ген. Добавлено @ 17:57
Подходит! Считает все прально но надо как то число d разбросать по другим числам |
Автор: Yanis 11.5.2006, 17:59 |
а ну да ![]() |
Автор: Yanis 11.5.2006, 18:32 |
Можно построить таблицу со значениями. Всего лишь 216 значений при данных условях ![]() |
Автор: Rondo 11.5.2006, 18:37 |
Может есть какието другие способы? |
Автор: Yanis 11.5.2006, 18:48 |
Автор: Ripper 11.5.2006, 20:08 |
незнаю у меня все быстро вычислялось т.к. числа не большие и перебор идет быстро |
Автор: Vit 11.5.2006, 20:49 | ||
Так чуток побыстрее будет
|
Автор: Cheburek 12.5.2006, 00:42 | ||||||
1 раз так
а потом все время вот так
а вообще по условию самое нормальное... |
Автор: Romikgy 12.5.2006, 09:34 | ||
Всего 219 таких комбинаций ![]() и потом можно по рандому выводить нужную строку из листбокса ![]() |
Автор: Демо 12.5.2006, 09:43 |
Если одно число зависит от других, то оно не является случайным, что противоречит условиям задачи. |
Автор: Демо 12.5.2006, 10:00 |
Метод Guedda вполне подходит, и итераций достаточно немного для поиска: Вот пара десятков решений этим методом, последнее число - количество итераций: 9 4 7 7 Ит: 42 9 2 8 8 Ит: 20 8 6 9 4 Ит: 2 8 9 5 5 Ит: 6 6 9 4 8 Ит: 11 5 7 9 6 Ит: 39 8 9 8 2 Ит: 49 7 9 8 3 Ит: 63 6 5 9 7 Ит: 37 9 8 3 7 Ит: 38 8 7 5 7 Ит: 13 8 7 8 4 Ит: 61 7 5 9 6 Ит: 16 9 5 7 6 Ит: 5 6 8 5 8 Ит: 8 6 6 7 8 Ит: 59 6 6 6 9 Ит: 3 7 7 7 6 Ит: 17 6 8 9 4 Ит: 7 7 8 6 6 Ит: 28 9 3 9 6 Ит: 41 7 9 7 4 Ит: 10 8 4 9 6 Ит: 46 9 8 8 2 Ит: 52 9 6 3 9 Ит: 56 9 7 6 5 Ит: 13 7 8 4 8 Ит: 3 4 9 7 7 Ит: 32 8 3 9 7 Ит: 12 7 8 8 4 Ит: 3 8 9 5 5 Ит: 10 8 4 9 6 Ит: 45 4 8 8 7 Ит: 16 7 7 8 5 Ит: 27 2 8 8 9 Ит: 2 4 7 7 9 Ит: 11 6 9 9 3 Ит: 24 1 8 9 9 Ит: 11 3 6 9 9 Ит: 61 6 6 8 7 Ит: 8 7 8 3 9 Ит: 1 6 6 7 8 Ит: 4 7 8 5 7 Ит: 10 6 9 6 6 Ит: 16 4 9 6 8 Ит: 25 7 6 8 6 Ит: 1 1 8 9 9 Ит: 10 7 9 7 4 Ит: 67 7 5 6 9 Ит: 31 9 4 8 6 Ит: 14 6 9 8 4 Ит: 58 9 7 9 2 Ит: 14 4 8 8 7 Ит: 20 9 6 7 5 Ит: 21 6 9 5 7 Ит: 2 8 2 9 8 Ит: 89 8 9 1 9 Ит: 8 2 9 9 7 Ит: 17 3 6 9 9 Ит: 32 9 9 7 2 Ит: 21 9 9 3 6 Ит: 32 7 9 9 2 Ит: 44 3 9 7 8 Ит: 12 5 7 6 9 Ит: 30 6 7 7 7 Ит: 4 5 9 4 9 Ит: 5 9 8 3 7 Ит: 29 |
Автор: Alexeis 12.5.2006, 10:22 |
Демо, Полностью согласен вычитание портит "случайность" Если вычитать так хоть выбирать чило из которого вычитаем произвольно или раскидывать вычитаемое число на всех(в смысле вычитать из каждого некоторое число чтоб сумма сохранялась) |
Автор: Guedda 12.5.2006, 10:52 |
Хм... Ну тогда и пользоваться этим методом. |
Автор: Alexeis 12.5.2006, 10:58 |
Guedda, может для Демо и подходит но автор (Rondo) говорит, что ему этот способ не годится. |
Автор: Guedda 12.5.2006, 11:01 |
Хм... Так это как раз таки не перебор, а генерация случайных чисел... Функцией random... |
Автор: Rondo 12.5.2006, 13:13 |
норма, я если че делаю пока такой... простенький key-gen ![]() Добавлено @ 13:13 Хотя я его реализовал... но всетаки для себя интересно как все это делается ![]() |