習題二:產生Gray碼/*************************************************//每次調用函數取得code的下一個碼(參數code為當前的gray碼)void gray ( int n, int *code ){ int t = 0; for ( int i = 0; i < n; i++ ) t += code[i]; if ( t % 2 == 1 ) for ( n--; code[n] != 0; n-- ); code[n-1] = 1 - code[n-1];}按照書上給出的演算法,產生gray碼可用上面的函數。但本題我採用了下面的方式產生gray碼**************************************************/#include<iostream>#include<fstream>using namespace std;fstream fout ("out.txt",ios::out);//將從000...000開始至100...000結束的gray碼編號為0,1,2...n//DecimaltoGray(x)返回第x個gray碼(此時的gray碼是十進位形式)int DecimaltoGray ( int x ){ return x ^ ( x >> 1 );}//參數x為gray碼的十進位形式//調用函數返回x的編號int GraytoDecimal ( int x ){ int y = x; while ( x >>= 1 ) y ^= x; return y;}//將十進位形式的gray碼以二進位形式輸出void printGray ( int n, int x ){ for ( int i = n-1; i >= 0; i-- ) fout << ((x>>i) & 1); fout << endl;}int main(){ int n; while ( cin >> n ) { for ( int i = 0; i < (2<<(n-1)); i++ ) printGray ( n, DecimaltoGray(i) ); fout << endl; } return 0;}