题目题意:
给一个长度为2的n次方的排列,要求找到一组保证相邻两项异或值之和最小,并输出结果。
题目知识点:
构造、位运算
题目分析:
题目中提到的相邻两项异或值最小,本质是让相邻两个数的二进制差异最小,这个与格雷码中相邻两个数的二进制只有一位不同一致,所以其构造逻辑与格雷码相同,代码如下:
#include<bits/stdc++.h>
using namespace std;
void solve(){
int n;
cin>>n;
long long t=pow(2,n);
for(int i=0;i<t;i++){
cout<<(i^(i>>1))<<" "; //格雷码本质
}
}
int main(){
int t=1;
while(t--){
solve();
}
}

京公网安备 11010502036488号