組合數學習題(Gray碼產生)

來源:互聯網
上載者:User
習題二:產生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;}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.