如何自己寫一個Random |
尚未結案
|
foxrabbit
一般會員 ![]() ![]() 發表:11 回覆:16 積分:5 註冊:2003-11-10 發送簡訊給我 |
|
neoart
版主 ![]() ![]() ![]() ![]() ![]() 發表:22 回覆:582 積分:425 註冊:2003-05-09 發送簡訊給我 |
|
pcboy
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:177 回覆:1838 積分:1463 註冊:2004-01-13 發送簡訊給我 |
|
foxrabbit
一般會員 ![]() ![]() 發表:11 回覆:16 積分:5 註冊:2003-11-10 發送簡訊給我 |
|
pcboy
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:177 回覆:1838 積分:1463 註冊:2004-01-13 發送簡訊給我 |
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Edit1: TEdit; Button1: TButton; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; a, c, m, Xn: Integer; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); var Hour, Min, Sec, MSec: Word; begin a:=3612; c:=5701; m:=566927; DecodeTime(Now, Hour, Min, Sec, MSec); Xn:= Min * 60 Sec; end; function MyRand:Integer; begin //Xn 1 = (aXn c) mod m, n>=0 式中初值 X0, 乘數 a, 增數 c 均不為負, 而且都小於模數 m。 //適當選擇 X0, a, c, 和 m 值, 即可產生亂數。 以 32 bits 的計算機為例, 可取 a=3612, c=5701, m=566927。 //產生亂數的方法有好幾種,這種方法稱為線性同餘法 (linear congruential method)。 Xn := (a* Xn c) mod m; MyRand := Xn; end; procedure TForm1.Button1Click(Sender: TObject); begin Edit1.Text := IntToStr(MyRand); end; end.********************* 如果您滿意答案,請結案 *********************
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案! 子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問! |
foxrabbit
一般會員 ![]() ![]() 發表:11 回覆:16 積分:5 註冊:2003-11-10 發送簡訊給我 |
這是我最後寫出來的方法,請大大多指導,告訴小弟還有什麼地方可以改進的
import java.util.*; public class myRandom{ public static void chkRand(int[] myRand){ int[] chkR = new int[10]; for (int j=0 ; j< myRand.length ;j ) { int jc = myRand[j]/10001; chkR[jc] ; } int count=0, total=10000; for (int k=0; k< chkR.length; k ) { System.out.println(count " ~ " total " :" chkR[k] " 次"); count = total 1; total =10000; } System.out.println("平均出現的次數約為一萬次左右"); } public static void main(String[] args){ int[] myRand = new int[100001]; int i = 0; while (i <= 100000){ long seed = System.nanoTime(); seed = (seed*16807)0001; myRand[i] = (int)seed; i ; } chkRand(myRand); } } |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |