雖然看不太懂你的問題!
不過不重複的數字我試過幾種
假設是4位數的話
你就給四個變數個別為 個 十 百 千
用迴圈輸入陣列中
然後你只要判別這四個有沒有重複就可以了!!
那不就不會產生重有重複數字的了
例如:
For I = 1 To 9
For J = 0 To 9
Do While (J = I)
J = J + 1
Loop
If J = 10 Then
J = 0
Exit For
End If
For K = 0 To 9
Do While ((K = J) Or (K = I))
K = K + 1
Loop
If K = 10 Then
K = 0
Exit For
End If
For L = 0 To 9
Do While ((L = I) Or (L = J) Or (L = K))
L = L + 1
Loop
If L = 10 Then
L = 0
Exit For
End If
M = M + 1
A = I * 1000 + J * 100 + K * 10 + L
這樣應該就可以了
然後你在把A存入陣列中!
取一個數可重複沒關係!
因為這次是要去當陣列的INDEX取其中的數字出來
不過~~~~~建議你~~~
最快的方法就是用亂數跳!
判別有沒有重複~~有的話重選就好了!
以現在電腦的速度~~不可能讓你等太久的!
只是時間就不能估計了!
--
[1;33m※ Origin: [36m奇摩 大摩域 [37m<telnet://bbs.kimo.com.tw> [m
[1;35m◆ From: [1;32m202.43.72.219 [m
> 順手寫的,沒編譯試過.....可能會有一些小錯誤....不過方法已經很清楚了....
> #define MaxN 5
> char n[MaxN];
> int iCount;
> void Init(void)
> {
> for (i=0;i<MaxN;i++)
> {
> n[i]=i;
> }
> iCount=MaxN;
> }
> int GetN(void)
> {
> int i=Random(iCount);
> int iResult=n[i];
> n[i]=n[iCount-1];
> iCount--;
> return iResult;
> }
這個演算法產生一個亂數的時間複雜度為 O(1) 就是保證一個單位時間就可以
產生一個數字,不會因為某個數字已經產生過而需要重新產生一個新的。
只要把那個 MaxN 改成你所要的個數
比如改成 52 就是產生 52 個 0~51 不重複的隨機亂數,
可以用來模擬撲克牌發牌,希望對你有所幫助....
《 在 POTRI...@bbs.kimo.com.tw (認真的電鍋最閃耀) 的大作中提到: 》
: ※ 引述《a24...@cis.nctu.edu.tw (阿強)》之銘言:
: > 如果使用亂數1到10 個亂數不讓它重覆要這樣寫呢?
: > 例如:猜數字遊戲,指1a2b那種,有誰能告訴我呢?
: > 感激不盡,謝謝!!
--
[m [1;36m※ 來源:‧蛋捲廣場 bbs.tku.edu.tw‧[FROM: 140.118.31.171] [m
用亂數用一個陣列把他紀錄下來..一遇到有重複的就重來一遍..
--
[1;32m※ Origin: [33m晨曦之鄉 [37m<bbs.cyut.edu.tw> [m
[1;31m◆ From: [36mR20-166.cyut.edu.tw [m