隨機生成六位不重復數值


在《Core JAVA》中有個隨機生成六位不重復數值的算法,大二用過一次,今天在寫《Algorithms》的練習題遇到類似的問題,特貼出!

 1 // 隨機生成六位不重復的數字
 2 private static int generate6BitInt() {
 3     int[] arr = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
 4     // 將數組隨機打亂,據算法原理可知:
 5     // 重復概率 = 1/10 * 1/9 * 1/8 * 1/7 * 1/6 * 1/5 * 1/4 * 1/3 * 1/2 * 1/1 = 1/3628800,
 6     // 即重復概率為三百多萬分之一,滿足要求。
 7     for(int num = 10; num > 1; --num) {
 8         int idx = StdRandom.uniform(num);
 9         int temp = arr[idx];
10         arr[idx] = arr[num - 1];
11         arr[num - 1] = temp;
12     }
13     // 第一個元素不能為0,否則位數不夠
14     if(0 == arr[0]) {
15         int ndx = StdRandom.uniform(10);
16         arr[0] = arr[ndx];
17         arr[ndx] = 0;
18     }
19     // 將數組前六位轉化為整數
20     int rs = 0;
21     for(int idx = 0; idx < 6; ++idx) {
22         rs = rs * 10 + arr[idx];
23     }
24     return rs;
25 }

或者   Math.random()  *  9 + 1) * 100000,注意:Math.random()生成的隨機數范圍是[0.0,1.0),如0.999999


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM