第一题 const int N = 100; int L[N],R[N],T[N]; void generateT(){ for(int i=1;i<=N;i++){ T[L[i]]=T[R[i]]=i; } } bool check(int i,int j){ return T[i]==j or T[j]==i; } 第三题 void putN(int n) { K[N-1]=n; swap(K[1], K[N-1]); int ind = 2; while (ind <= N) { if (K[(ind - 2) / 2+1] < K[ind]) { swap(K[(ind - 2) / 2+1], K[ind]); ind = (ind - 1) * 2 + 2; continue; } if (++ind > N) break; if (K[(ind - 2) / 2] < K[ind]) { swap(K[(ind - 2) / 2], K[ind]); ind = (ind - 1) * 2 + 2; continue; } break; } } 得到编码: A 0100 B 0101 C 011 D 10 E 11 F 00