Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 4.63
Fareiro
15 / 15 / 1
Регистрация: 06.12.2012
Сообщений: 132
#1

Все возможные комбинации длины k из 0 и 1 - C++

13.01.2013, 03:54. Просмотров 2752. Ответов 14
Метки нет (Все метки)

Как бы это реализовать? Подкиньте идей или может есть готовая у кого-то.
Кликните здесь для просмотра всего текста
Ввод k:3
Вывод:
0 0 1
0 1 0
1 0 0
1 1 0
0 1 1
и т.д
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.01.2013, 03:54
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Все возможные комбинации длины k из 0 и 1 (C++):

Все возможные комбинации 5 чисел - C++
В общем задача такая: Нужно, чтобы программа выдавала все возможные комбнации 5 чисел: 1 число от 1 до 32 2 число от 2 до 33, но...

Все возможные комбинации из 10 цифр по n - C++
есть 10 цифр, нужно написать программу, где вводишь n-кол-во чисел в последовательности, а потом программа перебирает все возможные...

Все возможные комбинации из 4 цифр - C++
Доброго времени суток! Прошу помочь с такой задачей: Пользователь вводит 4-х разрядное число. Вывести все возможные 4-х разрядные...

Найти все возможные комбинации по номеру карты - C++
Все привет!!! Выручайте с этим кодом уже вожусь почти неделю и не могу с ним нечего сделать #include "stdafx.h" #include <iostream> ...

Найти все возможные комбинации четырех букв - C++
Есть задача с 4 буквами.A,B,C,D нужно найти все возможные комбинации этих букв. Комбинации если я не путаю не чего считаются так...

Вывести все возможные комбинации цепочек в матрице смежности - C++
Есть матрица смежности вида: AB0 BCD DD0 CKN NE0 KB0 Т.е. если в конце строки 0, то из одного узла есть связь только к одному...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
UserAK
73 / 73 / 4
Регистрация: 25.12.2012
Сообщений: 189
Записей в блоге: 2
13.01.2013, 03:58 #2
тогда уж скорее
0 0 1 = 1
0 1 0 = 2
0 1 1 = 3
1 0 0 = 4
1 0 1 = 5
это просто представление чисел в двоичном виде
zvoronz
271 / 238 / 21
Регистрация: 29.05.2012
Сообщений: 889
13.01.2013, 03:59 #3
Можешь реализовать пару алгоритмов над массивами эмулирующими бинарную арифметику. Прибавляя единицу будем получать следующую комбинацию.
или
если знаете что k не будет превышать 32 или 64 то используйте просто int иди long int. Написать нужно будет алгоритм который будет выводить заданное кол-во битов переменной.
UserAK
73 / 73 / 4
Регистрация: 25.12.2012
Сообщений: 189
Записей в блоге: 2
13.01.2013, 04:01 #4
что бы перебрать все возможные комбинации, надо каждое число в диапазоне 0 - 2^k преобразовать в двоичный вид
Fareiro
15 / 15 / 1
Регистрация: 06.12.2012
Сообщений: 132
13.01.2013, 04:03  [ТС] #5
и так до 6ти, верно?)
Тогда хватит просто определить длину строки, взять факториал для определения количества комбинаций, брать число со счетчика, переводить в бинарный вид, и разбивать ответ.
Первое что пришло в голову. Как вам алгоритм?
UserAK
73 / 73 / 4
Регистрация: 25.12.2012
Сообщений: 189
Записей в блоге: 2
13.01.2013, 04:08 #6
почему факториал?

Добавлено через 2 минуты
если переводить всё включая 0 то количество будет 2^k
Fareiro
15 / 15 / 1
Регистрация: 06.12.2012
Сообщений: 132
13.01.2013, 04:09  [ТС] #7
C++
1
Число всех перестановок порядка  равно числу размещений из n по n, то есть факториалу
Или я что-то путаю?
UserAK
73 / 73 / 4
Регистрация: 25.12.2012
Сообщений: 189
Записей в блоге: 2
13.01.2013, 04:21 #8
может я чего путаю. мне казалось, что комбинации не повторяются для всех чисел от нуля до максимального числа, которое равно radix^k radix это я так понимаю база системы счисления в данном случае 2, а k ето количество разрядов
Fareiro
15 / 15 / 1
Регистрация: 06.12.2012
Сообщений: 132
13.01.2013, 04:21  [ТС] #9
C++
1
2
3
4
5
6
7
8
int k,k1;
    char b[30];
 
    cout<<"Enter size k: "; cin>>k;
    k1 = pow2(k);
 
    for(int i = 0; i < k1; i ++)
        cout<<ltoa(i,b,2)<<endl;
Так как вы сказали) pow2 - своя ф-ция возведения в квадрат...
Но тут проблемы с выводом До 15 вывод нарастающий от 1 до 4х битов, а дальше 5
Нужно как-то задать ему на скольких битах делать вывод
Миниатюры
Все возможные комбинации длины k из 0 и 1  
UserAK
73 / 73 / 4
Регистрация: 25.12.2012
Сообщений: 189
Записей в блоге: 2
13.01.2013, 04:23 #10
если Вам надо немножко комбинаций, то можно использовать itoa

Добавлено через 1 минуту
C++
1
2
    cout.fill('0');
    cout<<setw(k)<<_itoa(i,b,2)<<endl;
Fareiro
15 / 15 / 1
Регистрация: 06.12.2012
Сообщений: 132
13.01.2013, 04:24  [ТС] #11
Цитата Сообщение от UserAK Посмотреть сообщение
если Вам надо немножко комбинаций, то можно использовать itoa
Ее и использую) но надо как-то задать ей фиксированную длину на которой делать вывод...
Я понимаю что разницы между 001 и 0000 0001 нету но вид то не тот
UserAK
73 / 73 / 4
Регистрация: 25.12.2012
Сообщений: 189
Записей в блоге: 2
13.01.2013, 04:28 #12
вот должно нулями заполнять

Добавлено через 46 секунд
Цитата Сообщение от UserAK Посмотреть сообщение
cout.fill('0');
заполняет нулями


Цитата Сообщение от UserAK Посмотреть сообщение
setw(k)
длина

Добавлено через 2 минуты
Цитата Сообщение от UserAK Посмотреть сообщение
cout.fill('0'); cout<<setw(k)<<_itoa(i,b,2)<<endl;
вот же отредактировал
Fareiro
15 / 15 / 1
Регистрация: 06.12.2012
Сообщений: 132
13.01.2013, 04:30  [ТС] #13
Про setw знаю, а вот про cout.fill не знал)
C++
1
2
3
for(int i = 0; i < k1; i ++)
        cout.fill('0'); 
                cout<<setw(k)<<_itoa(i,b,2)<<endl;
как-то слишком монструозно, хотя и работает
---
Теперь все нормально)
UserAK
73 / 73 / 4
Регистрация: 25.12.2012
Сообщений: 189
Записей в блоге: 2
13.01.2013, 04:32 #14
Цитата Сообщение от Fareiro Посмотреть сообщение
как-то слишком монструозно, хотя и работает
да этож разве монструозно даже цикл без фигурных скобок получился
Fareiro
15 / 15 / 1
Регистрация: 06.12.2012
Сообщений: 132
13.01.2013, 04:34  [ТС] #15
Ха, без скобок не получится) у нас там болтается локальная переменная
Спасибо за помощь)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.01.2013, 04:34
Привет! Вот еще темы с ответами:

Нужно вывести все возможные возрастающие 6-ти значные комбинации - C++
Задачка: Нужно вывести все возможные возрастающие 6-ти значные комбинации из промежутка чисел &lt;0,100&gt; Подкиньте пару идей.

Написать программу, выводящую все возможные трехзначные комбинации с числами от 0 до 9 - C++
Нужно написать программу выводящую все возможный трехзначные комбинации с числами от 0 до 9. Вот как это сделать? Буду рад даже совету.

Перебрать все возможные комбинации трех чисел от нуля до двух - C++
Здравствуйте, помогите, пожалуйста, разобраться с темой (лучше всего написать код, а то на словах вроде понятно, но код всё же лучше) ...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
13.01.2013, 04:34
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru