| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Комбинаторика - булеан |
| Автор: nikitosinasuperman 20.3.2006, 15:53 | ||
| Подскажите пожалуйста, как правильно организовать алгоритм нахождения всех двоичных чисел определенного разряда вот должно быть так: 000 001 010 100 - вот тут момент. если по правилу сложения двоичных чисел, то должна быть строка 011 вместо 100. и тд до 111 Но я немного покуражился, и сделал для 3-х разрадного числа алгоритм, помогиче написать для любого разряда алгоритм:
|
| Автор: Romikgy 20.3.2006, 16:04 |
| Какова максимальная разрядность будет? |
| Автор: nikitosinasuperman 20.3.2006, 16:11 |
| а это имеет значение? ну для 10-ти |
| Автор: pablo 20.3.2006, 16:13 |
| Я могу предложить следующее: Например для 10 да и в общем для любого разряда: сначала записываем такое число нулей, числа которого разряда надо найти, например для 10 это будет 0000000000, затем, заменяем самый правый(левый) нуль на 1, получаем 0000000001, потом двигаем эту единицу, влево: т.е, вместо левого нуля, ставим 1, пока не достигнем левого(правого) конца строки, соодтветсвенно получаем числа: 000000010, 000000100, 0000010000, и т.д. Потом производим выше описанную операцию но уже немного по другому, ставим на 2 самые правые(левые) позиции 2 единицы и двигаем самую левую единицу вправо, потом единицу которая стоит правее и т.д, т.е получим числа примерно такие: 0000000011, 0000000101, 0000001001, 0000010001, ..., 1000000001, потом чиля такого вида: 1000000010, 1000000100 1000001000 ... Проведя операцию для числа единиц равному порядку числа, мы найдём все возможные комбинации. |
| Автор: maxim1000 20.3.2006, 17:19 |
| проще организовать прибавление единицы в двоичном коде: если разряд, к которому добавляется единица нулевой, то просто меняем его на 1 если 1 - меняем на 0 и добавляем единицу уже к следующему разряду пример: 101 001//начинаем с добавления единицы ксладшему разряду ------ 100//если была единица, меняем на ноль 010//и прибавляем уже к следующему 100 001 ------ 101//если был ноль - просто меняем на ноль и больше ничего не делаем... |
| Автор: sdeniss 20.3.2006, 17:35 |
| посмотри статью про БПФ на alogolist.manual.ru там написано подробно про добавление "обратной 1" |
| Автор: MAKCim 20.3.2006, 18:52 | ||
естественно вместо стачического массива и шаблона можно использовать дин массивы, вектора и т .д для больших _N будет работать медленно |
| Автор: darkart 20.3.2006, 19:25 | ||
|
| Автор: nikitosinasuperman 21.3.2006, 12:21 | ||
| Сеня с универа приехал, осенило. написал сложением единиц. захожу сюда, а тут такую идею предложил максим зацените:
в нем может что-то не так? пишите |
| Автор: Doc_d0s 21.3.2006, 17:00 |
| методом деление, только вот узнать с какого разряда писать, можно загнать в цикл и проверить, если будет не лень накидаю код и скину |