C\C++ 產生各位元不相等的隨機數

來源:互聯網
上載者:User

標籤:class   取出   函數名   span   數組   pre   隨機   調用   小遊戲   

  最近想寫一個1A2B的小遊戲來練習一下,結果在第一步產生隨機數的時候就遇到了一點點問題。

  遊戲初始化時需要先產生一個四位隨機數,且各位各不相等。於是最開始的思路是產生一個整數數組,只需要判斷產生的隨機數字是否跟之前的數字有重複,有則重建即可,但是之後發現兩個問題。首先是,函數每次調用後產生的隨機數是一樣的。第二,產生的隨機數如果0在第一位,則調用itoa函數時會被捨棄掉。

  後來研究中發現,出現的原因是srand放在了函數裡,每次調用函數都就重設隨機數種子至初始值,於是就會出現產生的隨機數都一樣的情況。至於第二種錯誤,可以通過另一種方式來巧妙避免。代碼如下,代碼中的思路為:

  先產生一個0-9的整數數組,再隨機從中取一個數,只要不等於-1就將其取出放置到要產生的隨機數中,並將該位置為-1。這樣做也能提高一點點效率,而不用去刪除數群組成員。

 1 /******************************************************************************  2 *函數名稱:void GetRandom(char * random) 3 *函數功能:產生一個各位元不相等的四位隨機數  4 *入口參數:random為返回的隨機數  5 *返 回 值:無  6 *備 註:先產生一個0-9的整數數組,再隨機從中取四個數,每取一個將該位置為-1  7 *******************************************************************************/   8 void GetRandom(char * random){ 9     int i, j[10], k;10     for (i = 0; i < 10; i++){11         j[i] = i;12     }13     for(i = 0; i < 4; i++){14         //產生第i個隨機數 15         k = (int)rand() % 10;//k為下標 16         while (j[k] == -1){17             k = (k + 1) % 10; 18         }19         random[i] = ‘0‘ + j[k];20         j[k] = -1;21     }22 }

C\C++ 產生各位元不相等的隨機數

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.