Задать вопрос
@dearname

Перестановки бинарного вектора

Добрый вечер, мне нужно вывести все перестановки вектора определенной длины и определенного веса. Вот как я реализовал.

#include <iostream>
#include <algorithm>
#include <vector>
#include <cmath>
using namespace std;

vector<int> generator(int n, int m) {
    vector <int> v;
    for(int i=0; i<pow(2,n)-1; i++ ) {
        if(i<=m-1)  v.push_back(1);
        else v.push_back(0);
    }
return v;
}

int main()
    {
        int n,m;
        cout<<"N:";
        cin>>n;
        cout<<"M:";
        cin>>m;
        vector<int> v = generator(n,m);

        do
        {
             for(int i=0; i<v.size(); i++)
                cout <<v[i]<<" ";
             cout<<endl;
        }
        while(next_permutation(v.begin(), v.end()));
        return 0;
    }


Но почему то не работает, я не могу понять почему. Выводит только вначале вектор, который создался, а дальше не выводит ничего завершает работу. Это получается одна перестановка что ли.
  • Вопрос задан
  • 2606 просмотров
Подписаться 2 Оценить Комментировать
Решения вопроса 1
Сортить Пушкин будет?)

#include <iostream>
#include <algorithm>
#include <vector>
#include <cmath>

using namespace std;

vector<int> generator(int n, int m) {
    vector <int> v;
    for(int i=0; i<pow((double)2,n)-1; i++ ) {
        if(i<=m-1)  v.push_back(1);
        else v.push_back(0);
    }
return v;
}

int main()
    {
        int n,m;
        cout<<"N:";
        cin>>n;
        cout<<"M:";
        cin>>m;
        vector<int> v = generator(n,m);
	sort(v.begin(), v.end());
        do
        {
             for(int i=0; i<v.size(); i++)
                cout <<v[i]<<" ";
             cout<<endl;
        }
        while(next_permutation(v.begin(), v.end()));
        return 0;
    }
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы