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

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

  遊戲初始化時須要先生成一個四位隨機數,且各位各不相等。因而最開始的思路是生成一個整數數組,只須要判斷生成的隨機數字是否跟以前的數字有重複,有則從新生成便可,可是以後發現兩個問題。首先是,函數每次調用後生成的隨機數是同樣的。第二,生成的隨機數若是0在第一位,則調用itoa函數時會被捨棄掉。dom

  後來研究中發現,出現的緣由是srand放在了函數裏,每次調用函數都就重置隨機數種子至初始值,因而就會出現生成的隨機數都同樣的狀況。至於第二種錯誤,能夠經過另外一種方式來巧妙避免。代碼以下,代碼中的思路爲:函數

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

複製代碼
 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 }
複製代碼
相關文章
相關標籤/搜索