题目:墨提斯的排列
思路:
异或运算的性质决定了,两个数的二进制表示中,不同的位数越多,它们的异或值就越大。 因此,要最小化异或值之和,就需要让排列中相邻的两个数在二进制表示下只有一位不同。 满足这一性质的序列,正是格雷码(Gray Code)。
代码:
#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号