题目
输入
输出
思路
要使相邻两项的异或值相加最小,就要相邻的数二进制尽可能相近,同时也要满足排列的性质。
0000
0001
0010
0011
在满足排列性质的前提下,发现只有两个数二进制异或完只剩下一个1的排序最小。
也就是答案构成格雷码。
格雷码第i项就是i^(i>>1)。
完整代码
```#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
cin>>n;
for(int i=0;i< 1<<n;i++){
cout<<(i ^ (i>>1))<<" ";
}
}

京公网安备 11010502036488号