题目输入n,构造长度为$2^n-1$的序列,使得下面在这个式子的值最小 方法:每组相邻元素最好二进制中只有一位不一样 打表结果: 1234n=1 0 1n=2 0 1 3 2n=3 0 1 3 2 6 7 5 4 1 0 2 3 7 6 4 5 所以暴力或者按结论使用格雷码 12345678910111213#include <iostream>using namespace std;int main() { int n; cin >> n; int m = 1 << n; for (int i = 0; i < m; ++i) { cout << (i ^ (i >> 1)); if (i < m - 1) cout << ' '; } cout << endl; return 0;} 1234567891011121314151617181920212223ll n; cin>>n; set<ll> s; s.insert(0); cout<<"0 "; ll last=0; for(int i=1;i<=(1ll<<n)-1;i++){ for(int j=0;j<=18;j++){ ll next; if((last>>j)%2==0){ next=last+(1ll<<j); } else{ next=last-(1ll<<j); } if(s.find(next)==s.end()){ cout<<next<<" "; s.insert(next); last=next; break; } } } cout<<endl;