要使两数异或值最小,即两数二进制的差异最小。

例如0000后为0001,0001后本应为0000,但0000在前面已出现过。

所以0001后为0010。 即0000——0001——0010——0011,与格雷码一致。

下面是代码:

#include<bits/stdc++.h>
#define int long long
using namespace std;
signed main(){
	int n;
	cin>>n;
	for(int i=0;i<(1<<n);i++){
		cout<<(i^(i/2))<<" ";
	}
}