全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:3460
推到 Plurk!
推到 Facebook!

如何產生不重複的亂數

答題得分者是:T.J.B
Peter
一般會員


發表:10
回覆:2
積分:2
註冊:2002-06-28

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-09-24 11:05:43 IP:210.65.xxx.xxx 未訂閱
請教各位前輩 要如何才能產生不重複的亂數呢??
T.J.B
版主


發表:29
回覆:532
積分:497
註冊:2002-08-14

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-09-24 11:49:18 IP:61.220.xxx.xxx 未訂閱
引言: 請教各位前輩 要如何才能產生不重複的亂數呢??
你說產生不重複的亂數是指同一次每組號碼不同但下次可出現 還是一次出現一個號碼後永遠就不再出現 另一個問題有否亂數區間 可否清楚描述你的問題 < >< > 回首來時路 也無風雨也無晴~~@.@
------
天行健
君子當自強不息~~@.@
Peter
一般會員


發表:10
回覆:2
積分:2
註冊:2002-06-28

發送簡訊給我
#3 引用回覆 回覆 發表時間:2002-09-24 11:59:04 IP:210.65.xxx.xxx 未訂閱
引言:
引言: 請教各位前輩 要如何才能產生不重複的亂數呢??
你說產生不重複的亂數是指同一次每組號碼不同但下次可出現 還是一次出現一個號碼後永遠就不再出現 另一個問題有否亂數區間 可否清楚描述你的問題 < >< > 回首來時路 也無風雨也無晴~~@.@
我的意思是指每一次每組號碼不同但下次可出現
T.J.B
版主


發表:29
回覆:532
積分:497
註冊:2002-08-14

發送簡訊給我
#4 引用回覆 回覆 發表時間:2002-09-24 13:59:03 IP:61.220.xxx.xxx 未訂閱
給你做參考 :    unit Unit1;    interface    uses   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,   Dialogs, StdCtrls;    type   TForm1 = class(TForm)     Button1: TButton;     Label1: TLabel;     procedure Button1Click(Sender: TObject);   private     { Private declarations }   public     { Public declarations }   end;    var   Form1: TForm1;    implementation    {$R *.dfm}    procedure TForm1.Button1Click(Sender: TObject);  var   aa :array[1..5] of integer; //假設你是有5組號碼   bb : array[1..250] of boolean;// 設定此亂數範圍的數字是否被選取   i ,j : byte;   ss : string; begin   Randomize; //撥亂數種子   for j := 1 to 250 do  //將1~250的初始化   begin     bb[j] := false;    //設定全部尚未選取過   end;      for i := 1 to 5 do   begin     repeat       aa[i] := random(250)+1; //範圍從1到250     until bb[aa[i]] = false; //一直選到沒用過的數字為止     bb[aa[i]] := true; //true代表這一個數字已經用過,false表示還沒用過   end;    ss := '';    for i := 1 to 5 do    begin      ss := ss+IntToStr(aa[i])+',';    end;    ShowMessage(ss);//可觀察此結果 5組號碼都沒重覆 end;    end.    ps: aa 及 bb陣列宣告可依你的需求做改變  但要注意 數字範圍 跟 型態 的關係        < >< > 回首來時路 也無風雨也無晴~~@.@ 發表人 - T.J.B 於 2002/09/24 14:01:21
------
天行健
君子當自強不息~~@.@
anderslee
初階會員


發表:2
回覆:32
積分:26
註冊:2002-06-03

發送簡訊給我
#5 引用回覆 回覆 發表時間:2002-10-02 15:56:52 IP:202.64.xxx.xxx 未訂閱
我相信方法只能和以往產生過的亂數一一比較, 如果重覆就再產生一個亂數 pseudo code  => generate a random number  => compare with list  => if exists loop back to step 1  => add the new number on the list  => return the new number    
引言: 請教各位前輩 要如何才能產生不重複的亂數呢??
sryang
尊榮會員


發表:39
回覆:762
積分:920
註冊:2002-06-27

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-03-03 23:14:57 IP:61.224.xxx.xxx 未訂閱
引言: 我相信方法只能和以往產生過的亂數一一比較, 如果重覆就再產生一個亂數 pseudo code => generate a random number => compare with list => if exists loop back to step 1 => add the new number on the list => return the new number
引言: 請教各位前輩 要如何才能產生不重複的亂數呢??
我有另一個方法,叫做洗牌法 亂數範圍為 0 ~ n-1 時可用,方法如下:
1. 宣告一個 0..n-1 的 int 陣列
2. 初始化陣列的每個元素,讓元素等於下標 (IntArr[i] := i)
3. 跑 n 次迴圈
  3.1 取兩個 0..n-1 之間的數
  3.2 將陣列中的這兩個元素交換
4. 要拿幾個就從陣列的開頭取幾個
保證不重複,速度也穩定 用比較法的缺點是:當要把所有數字不重複的全部取出時,速度會隨著亂數範圍的增大而急速減慢 加油喔,喵~
------
歡迎參訪 "腦殘賤貓的備忘錄" http://maolaoda.blogspot.com/
系統時間:2024-05-03 17:26:11
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!