轉徐明吉 C 生成隨機數

2022-03-13 21:51:55 字數 2560 閱讀 1545

1

private

static

char constant = 2;

7public

static

string generaterandomnumber(int

length)815

return

newrandom.tostring();

16 }

隨機數的使用很普遍,可用它隨機顯示,用它防止無聊的人在論壇灌水還可以用來加密資訊等等。本文討論如何在一段數字區間內隨機生成若干個互不相同的隨機數,比如在從1到20間隨機生成6個互不相同的整數,並通過此文介紹visual c#中隨機數的用法。

.net.frameword中提供了乙個專門產生隨機數的類system.random,此類預設情況下已被匯入,程式設計過程中可以直接使用。我們知道,計算機並不能產生完全隨機的數字,它生成的數字被稱為偽隨機數,它是以相同的概率從一組有限的數字中選取的,所選的數字並不具有完全的隨機性,但就實用而言,其隨機程度已經足夠了。

我們可以用以下兩種方法初始化乙個隨機數發生器;

函式是這樣用,比如100至999的隨機數

1 random ran=new

random();

2int randkey=ran.next(100,999);

不過這樣會有重複,可以給random乙個系統時間做為引數,以此產生隨機數,就不會重複了

第一種方法不指定隨機種子,系統自動選取當前時前作隨機種子:

1 random ra=new random();
第二種方法是指定乙個int型的引數作為隨機種子:

1

int iseed=6

;2 random ra=new random(iseed);

下面我們要用到random.next()方法產生隨機數。

1 ra.next();
它返回乙個大於或等於零而小於2,147,483,647的數,這並不滿足我們的需要,下面我們介紹它的過載函式和其它一些方法。

1

public

virtual

int next(int);

用法:ra.next(20)

返回乙個小於所指定最大值(此處為20)的正隨機數。

1

public

virtual

int next(int minvalue, int maxvalue);

用法:ra.next(1,20)

返回乙個指定範圍內(此處為1-20之間)的隨機數,我們在下面的例項中會用到此函式。

類system.random還有幾個方法分別是:

公共方法:

nextbytes用隨機數填充指定位元組陣列的元素。

nextdouble返回乙個介於 0.0 和 1.0 之間的隨機數。

受保護的方法:

sample返回乙個介於 0.0 和 1.0 之間的隨機數,只允許子類物件訪問。

以上介紹了隨機數的基本用法,下面我們用乙個例項來做更進一步的介紹。要在一段數字區間內隨機生成若干個互不相同的隨機數,比如在從1到20間隨機生成6個互不相同的整數。

主要是下面兩個函式getrandomnum與getnum:

publicint getrandomnum(intnum,intminvalue,intmaxvalue)

returnarrnum;

}getrandomnum即是在區間[minvalue,maxvalue]取出num個互不相同的隨機數,返回的陣列包含著結果。

其中隨機數是這樣建立的 random ra=new random(unchecked((int)datetime.now.ticks));為什麼不用random ra=new random();(系統自動選取當前時前作隨機種子)呢?

用系統時間做隨機種子並不保險,如果應用程式在乙個較快的計算機上執行,則該計算機的系統時鐘可能沒有時間在此建構函式的呼叫之間進行更改,random 的不同例項的種子值可能相同。這種情況下,我們就需要另外的演算法來保證產生的數字的隨機性。所以為了保證產生的隨機數足夠"隨機",我們不得不使用複雜一點的方法來獲得隨機種子。在上面的這段程式中,我們首先使用系統時間作為隨機種子,然後將上一次產生的隨機數跟迴圈變數和乙個與系統時間有關的整型引數相乘,以之作為隨機種子,從而得到了每次都不同的隨機種子,保證了產生足夠"隨機"的隨機數。

函式getnum是一遞迴,用它來檢測生成的隨機數是否有重複,如果取出來的數字和已取得的數字有重複就重新隨機獲取。值得注意的是要用一同乙個隨機數例項生成,所以ra要作為引數傳入getnum中,否則生成的數字會有重複。

publicintgetnum(int arrnum,inttmp,intminvalue,intmaxvalue,random ra)

n ;}

returntmp;

}最後就是要顯示出來,當點選乙個button時取出的數字顯示在乙個label中。

privatevoidbutton1_click(objectsender, system.eventargs e)

label1.text=temp; //顯示在label1中

}

C 隨機數生成

using system using system.collections.generic using system.text namespace createrandomno return sb.tostring 生成大寫字母隨機數 public static string getabcpwd i...

C 隨機數生成

標準庫 被包含於中 提供兩個幫助生成偽隨機數的函式 函式一 int rand void 從srand seed 中指定的seed開始,返回乙個 seed,rand max 0x7fff 間的隨機整數。函式二 void srand unsigned seed 引數seed是rand 的種子,用來初始化...

C 隨機數生成

標準庫 被包含於中 提供兩個幫助生成偽隨機數的函式 函式一 int rand void 從srand seed 中指定的seed開始,返回乙個 seed,rand max 0x7fff 間的隨機整數。函式二 void srand unsigned seed 引數seed是rand 的種子,用來初始化...