產生不重複之亂數
本篇記錄解題時遇到的題目:如何產生不重複的1-10的數字
解題步驟
宣告陣列
首先宣告一個陣列空間為10的 num變數
透過for 迴圈製作1-10的數字
亂數函式
宣告一個陣列 arr 空間為5
arr陣列用途為放置亂數
首先使用亂數製作0-9的數字n,並放入num陣列
假設亂數產生出 n=2 ,那麼
num[2] = 3
以此類推:num[0]=1, num[1]=2, num[2]=3, …, num[9]=10
再將
num[2]
放入arr[0]
num
[0]
[1]
[2]
[3]
[4]
[5]
[6]
[7]
[8]
[9]
值
1
2
3
4
5
6
7
8
9
10
arr
[0]
[1]
[2]
[3]
[4]
值
3
0
0
0
0
陣列不會因為取代了前方的值,本值就消失 所以最後方[9]=10
剛剛是透過亂數產生0-9,現在變成產生0-8;目的是不去取用到num[9]
繼續剛剛的假設,如果產生出 n = 8 那麼 num[ 8 ]=10 再把 num[ 8 ]=10 放到 arr[1] (此為第二個亂數)。
num
[0]
[1]
[2]
[3]
[4]
[5]
[6]
[7]
[8]
[9]
值
1
2
4
5
6
7
8
9
10
10
arr
[0]
[1]
[2]
[3]
[4]
值
3
10
0
0
0
以此類推,再產生0-7、0-6、0-5 …
完整程式碼
後記
本文於 iT邦幫忙曾被提出討論,在此感謝 fysh711426 替我更近一步的解說,以下為 fysh711426 所示範的程式運行:
初值
random n = 5
random n = 5
random n = 3
10-i
是因為要讓每次取 num 陣列的範圍變小,
以上面結果來說明,可以理解成不要取重複 10 的部分。
num.length – 1
是因為在把 num 往前移動時,如果不減一,j 在最尾端時 num[j+1] 就會超出陣列範圍。
Last updated