隨機數的使用很普遍,可用它隨機顯示,用它防止無聊的人在論壇灌水還可以用來加密資訊等等。本文討論如何在一段數字區間內隨機生成若干個互不相同的隨機數,比如在從1到20間隨機生成6個互不相同的整數,並通過此文介紹visual c#中隨機數的用法。
.net.frameword中提供了乙個專門產生隨機數的類system.random,此類預設情況下已被匯入,程式設計過程中可以直接使用。我們知道,計算機並不能產生完全隨機的數字,它生成的數字被稱為偽隨機數,它是以相同的概率從一組有限的數字中選取的,所選的數字並不具有完全的隨機性,但就實用而言,其隨機程度已經足夠了。
我們可以用以下兩種方法初始化乙個隨機數發生器;
函式是這樣用,比如100至999的隨機數
random ran=new random();
int randkey=ran.next(100,999);
不過這樣會有重複,可以給random乙個系統時間做為引數,以此產生隨機數,就不會重複了
第一種方法不指定隨機種子,系統自動選取當前時前作隨機種子:
random ra=new random();
第二種方法是指定乙個int型的引數作為隨機種子:
int iseed=6;
random ra=new random(iseed);
下面我們要用到random.next()方法產生隨機數。
ra.next();
它返回乙個大於或等於零而小於2,147,483,647的數,這並不滿足我們的需要,下面我們介紹它的過載函式和其它一些方法。
public virtual int next(int);
用法:ra.next(20)
返回乙個小於所指定最大值(此處為20)的正隨機數。
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:
public int getrandomnum(int num,int minvalue,int maxvalue)
random ra=new random(unchecked((int)datetime.now.ticks));
int arrnum=new int[num];
int tmp=0;
for (int i=0;i<=num-1;i++)
可以用trace(randomxiao(3,2));實驗一下。這個函式簡單。math.pow(n,m)用於返回乙個以n為底,m為指數的數。乘方!
function randomnm(n,m)
else
}之所以用random(m-n+1)是因為隨機數的範圍是m-n,加上1使得m也能在裡面。加上n保證隨機數以n為下限。
加上判斷使函式更完整。另外,如果要返回乙個負數隨機數,也可以用randomnm(n,0);當然,我想更一般的是用-random(n);
function randomascii()
return c;
}返回乙個不區分大小寫的隨機字母
如果要返回大寫,把if條件句去掉就行了。如果要返回小寫,可以把條件句改為恆成立,或者去掉條件,最後一句改為:
return c.tolowercase(); string.fromcharcode(number)函式返回number代表數字的ascii碼。
tolowercase()用於將大寫字母轉為小寫。
function randomkdiffer(n,m,k)
}if (j == i)
}return arrayk;
}陣列arrayk中的元素即為所得值。注意到我們借用了random(m-n+1)+n來返回乙個n~m的隨機數。所以m本身也會被返回。
如果要返回m以內的數,可以把n值改為0。如果要隨機返回不確定個數,可以把入口引數的k值賦為k=random(m-n);
隨機返回不一定互異的數,把判斷去掉就可以了,注意i++不要漏掉。這裡不再給出。
#指定若干個字元/數字,然後從中隨機返回乙個(或多個)字元/數字,可以把原字元賦給乙個陣列,再根據陣列的下標來
決定返回值。這裡不再舉出函式,大家可以自己嘗試。
#另需指出,對於隨機設定乙個mc的顏色值,我們較多採用mccolor.setrbg(random(0xffffff));下面的例子中會有說明。
如果要指定乙個色域,可以採用上面給出的函式。如果對color物件不太了解的可以查幫助,這裡不作討論。
以上函式算是由random直接衍生的,下面再舉個例子,可以說是衍生函式的衍生函式,其中會直接用到上面給出的函式,請注意。
#返回乙個指定長度的隨機大寫英文本串
function randomstring(n)
*/arrayb = arrayb+c;
}return arrayb;
}注意到stringcharcode方法,如果要寫成小寫,則把返回值寫成arrayb.tolowercase();如果返回乙個不區分大小寫的字串,
則把注釋去掉.如果要返回乙個不指定長度的字串,則可以把入口引數賦值為random(n);這樣只指定其上限.此函式也可以用
randomascii函式實現,留給大家自己思考.
#在幾個區域中選出隨機數
比如,在120,4570這兩段數之間選取乙個隨機數。因為區域數未定,所以直接用乙個確定的函式編寫多有不便,
我們要使用的方法就是用switch語句進行定向,具體的我們給出乙個函式,返回乙個120,4570內的數,其它區域讀者請自行更改。
function randomaarea(a,b) else
}其中用到乙個函式ord(char),這是乙個不推薦的函式.用於返回char字元的ascii碼。
如果大家想在任何地方呼叫函式,則需要稍稍變一下,把我們寫的函式改變為全域性函式.這樣就可以不用標明路徑而自如地向呼叫系統
函式一樣了.方法如下.例如:函式randomxiao如果要宣告為全域性函式,需要把第一行改為:
_global.randomxiao=function(n,m)
對全域性函式的概念不很清楚的朋友不用被這個名詞嚇倒.
這樣改了函式第一行之後,在任何地方,比如在乙個mc裡,直接用(對,直接用,不用加_root路徑了)randomxiao(n,m)就可以
random類是乙個產生偽隨機數字的類,它的建構函式有兩種,乙個是直接new random(),另外乙個是new random(int32),前者是根據觸發那刻的系統時間做為種子,來產生乙個隨機數字,後者可以自己設定觸發的種子,一般都是用uncheck((int)datetime.now.ticks)做為引數種子,因此如果計算機執行速度很快,如果觸發randm函式間隔時間很短,就有可能造成產生一樣的隨機數,因為偽隨機的數字,在random的內部產生機制中還是有一定規律的,並非是真正意義上的完全隨機。
random類產生隨機數字的主要辦法是next(),next(100)產生乙個比100小的正整數,next(1,100)在1到100中間產生乙個隨機數字,而利用ticks(以100毫秒做基礎單位的時間數量單位)來產生隨機數,還是存在合理性的。
/// /// 用隨機數實現一件事情出現的概率是10%,另一件事情出現的概率是90%
///
///
private static void main(string args)
;random ran = new random(unchecked((int)datetime.now.ticks));
int num1 = 0;
int num2 = 0;
for (int i = 0; i < 100000; i++)
else
}console.write(num1 + "--" + num2);
}/// ///舉例:用等差概率取0-99的整數,但讓99的出現機率最大,98比99小一點,97比98小一點,0出現的機率最小
///
///
///
private static int getrandom(int number)
}return -1;
}
C Random得隨機數求均值 方差 正態分佈
06年遙感上機複試的程式 請用vc或c編寫以下程式 正態分佈隨機數的產生。步驟如下 1 利用隨機函式rand 生成 0,1 區間的100個均勻分布隨機數 2 計算這100個均勻分布隨機數的均值和方差,計算公式如下 3 將這100個均勻分布的隨機數,及其均值和方差儲存到文字檔案 c temp sour...
mod函式詳解
我們知道,mod函式是乙個求餘函式,其格式為 mod nexp1,nexp2 即是兩個數值表示式作除法運算後的餘數。那麼 兩個同號整數求餘與你所知的兩個正數求餘完全一樣 即兩個負整數與兩個正整數的演算法一樣 一 兩個異號整數求餘 1.函式值符號規律 餘數的符號 mod 負,正 正 mod 正,負 負...
CDC PatBlt 函式詳解。
函式功能 該函式使用當前選入指定裝置環境中的刷子繪製給定的矩形區域。通過使用給出的光柵操作來對該刷子的顏色和表面顏色進行組合。函式原型 bool patblt hdc hdc,int nxleft,int nyleft,int nwidth,int nheight,dword dwrop 引數 hd...