Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.02.2011, 00:22   #1
nick_5714
 
Регистрация: 06.12.2010
Сообщений: 3
По умолчанию все возможные числа

известно количество нулей и количество единиц в двоичном числе. вывести все возможные числа составленные из этих ноликов и единичек.
/язык программирования - паскаль/
буду оч благодарен
nick_5714 вне форума Ответить с цитированием
Старый 16.02.2011, 00:40   #2
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,551
По умолчанию

Это можно решить так:
1. Выписываем сначала число, где первыми идут все нули, затем все единицы.
2. Двигаем правый нолик вправо по 1 разряду.
3. Повторяем тоже самое для следующего нолика.
4. И так, пока все нолики не передвинем в правую сторону.

Пример для 2-х нулей и 2-х единиц:
0011
0101
0110
1010
1100

Программно сами подумайте как такое реализовать.
Arigato вне форума Ответить с цитированием
Старый 16.02.2011, 00:54   #3
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

> 0011

строго говоря, это число не составлено из двух нулей и двух единиц. Что ещё хуже, алгоритм не генерирует такое число, например: 1001
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 16.02.2011, 10:18   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

ребят, Вы меня, конечно, извините, но разве не проще (алгоритмически) банально перебрать все числа от нуля до Max(целое в данном типе) и проверять, если количество единичек в числе равно заданному - выводить/считать данное число.

p.s. я понимаю, что это неоптимально с точки зрения быстродействия, зато просто, понятно и реализуется в несколько строк кода!

p.p.s. в условия данной задачи ОБЯЗАТЕЛЬНО должно быть указан тип (размерность в байтах) получаемых чисел. Иначе задача НЕ ИМЕЕТ решения (при числе единиц больше нуля, разумеется! )
Serge_Bliznykov вне форума Ответить с цитированием
Старый 16.02.2011, 10:51   #5
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

Смотря сколько бит надо перебирать. Если 128, то можно и не дождаться в этой жизни )
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 16.02.2011, 13:40   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от veniside
Смотря сколько бит надо перебирать. Если 128, то можно и не дождаться в этой жизни )
veniside, в принципе согласен. Стоит ли таким способом решать эту задачу зависит от того, какой размер должен быть у получаемых чисел!

но, с другой стороны,
Цитата:
вывести все возможные числа составленные из этих ноликов и единичек.
при 128 битном числе (кстати, ни в Pascal, ни в Delphi, ни в других современных ЯП (по крайней мере в распространнённых ЯП) нет типов данных с целыми числами 128битной длины!) и числе единичек, ну, например, 60 - подсчитайте, количество получаемых чисел. Ну и если выводить 100 чисел в секунду - сколько понадобится времени, чтобы вывести ВСЕ возможные числа... Думаете, есть шанс дождаться результата в этой жизни?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 16.02.2011, 14:41   #7
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

Для 60 единиц шансов нет, а для 4-5 есть )

> нет типов данных с целыми числами 128битной длины

Кстати зря, что нет. 128-битные XMM регистры ещё в третьем пне появились.

И разница с полным перебором может впечатлять ) Вот допустим задано 63 нуля и 1 единица. Это всего 64 комбинации, а полным перебором прийдётся просмотреть все 2^64 комбинаций.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."

Последний раз редактировалось veniside; 16.02.2011 в 14:45.
veniside вне форума Ответить с цитированием
Старый 16.02.2011, 15:41   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
И разница с полным перебором может впечатлять
угу. тут я полностью согласен!
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Все возможные размещения чисел от 2 до n mariafors Общие вопросы C/C++ 3 25.12.2010 21:19
находит одно решение а нужно все возможные specnazkin Помощь студентам 5 21.11.2010 09:28
Все возможные варианты строки Vikenty Общие вопросы Delphi 3 29.08.2010 03:30
графы - Все возможные пути manuk Помощь студентам 9 23.05.2010 23:58
Все возможные слагаемые anGeee Паскаль, Turbo Pascal, PascalABC.NET 4 04.12.2008 20:22