Как определить побитовое и (

#python #python-3.x #python-2.7

#python #python-3.x #python-2.7

Вопрос:

Как определить перестановки списка и определить значение arriamp;arri 1 , где amp; — побитовые и(amp;)

предположим, у нас есть список [1,2,3], и нам нужно найти все перестановки этого списка, и тогда мы найдем, есть ли какая-либо перестановка, arri amp; arri 1 больше 0 или нет . если да, мы напечатаем только этот список.

Комментарии:

1. Я думаю, что этот вопрос, возможно, потребуется отредактировать для уточнения. Когда вы говорите array amp; array 1 > 0, применяете ли вы побитовое amp; к 3 значениям каждого массива? Каким будет желаемый результат для вашего примера, [1,2,3]?

2. @Doot да, применяя для трех значений. желаемый результат будет 1 3 2 может быть несколько выходов.

Ответ №1:

Если вы имеете в виду этот вопрос, то одним из возможных решений было бы использование обратного отслеживания. Я уверен, что есть более быстрый способ сделать это.

 #include <bits/stdc  .h> 
using namespace std;

bool beautifulPermutations(vector<int> cur,set<int> used,int n){

    if(cur.size() == n){
        for(auto x:cur){
            cout<<x<<" ";
        }
        cout<<endl;
        return true;
    }
    for(int i=1;i<=n;i  ){
        if(used.find(i) == used.end()){
            if(cur.size() == 0 || (((int)cur.back() amp; i) > 0)){
                cur.push_back(i);
                used.insert(i);
                bool res = beautifulPermutations(cur,used,n);
                if(res)
                    return true;
                int x = cur.back();
                cur.pop_back();
                used.erase(x);
                
            }
        }
    }
    return false;
}

int main(){
    int t;
    cin>>t;
    while(t-->0){
        int n;
        cin>>n;
        vector<int> v;
        set<int> s;
        if(!beautifulPermutations(v,s,n))
            cout<<-1<<endl;
    }
}