![C#生成不重復(fù)的隨機(jī)數(shù)介紹_第1頁](http://file4.renrendoc.com/view/ee4c6424fef209caeef84f553859441f/ee4c6424fef209caeef84f553859441f1.gif)
![C#生成不重復(fù)的隨機(jī)數(shù)介紹_第2頁](http://file4.renrendoc.com/view/ee4c6424fef209caeef84f553859441f/ee4c6424fef209caeef84f553859441f2.gif)
![C#生成不重復(fù)的隨機(jī)數(shù)介紹_第3頁](http://file4.renrendoc.com/view/ee4c6424fef209caeef84f553859441f/ee4c6424fef209caeef84f553859441f3.gif)
![C#生成不重復(fù)的隨機(jī)數(shù)介紹_第4頁](http://file4.renrendoc.com/view/ee4c6424fef209caeef84f553859441f/ee4c6424fef209caeef84f553859441f4.gif)
![C#生成不重復(fù)的隨機(jī)數(shù)介紹_第5頁](http://file4.renrendoc.com/view/ee4c6424fef209caeef84f553859441f/ee4c6424fef209caeef84f553859441f5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、C#生成不重復(fù)的隨機(jī)數(shù)介紹我們?cè)谧瞿茏詣?dòng)生成試卷的考試系統(tǒng)時(shí),常常需要隨機(jī)生成一組不重復(fù) 隨機(jī)數(shù)的題目,在.net Framework中提供了一個(gè)專門用來產(chǎn)生隨機(jī)數(shù)的 類 System.Random。對(duì)于隨機(jī)數(shù),大家都知道,計(jì)算機(jī)不可能產(chǎn)生完全隨機(jī)的數(shù)字,所 謂的隨機(jī)數(shù)發(fā)生器都是通過一定的算法對(duì)事先選定的隨機(jī)種子做復(fù)雜 的運(yùn)算,用產(chǎn)生的結(jié)果來近似的模擬完全隨機(jī)數(shù),這種隨機(jī)數(shù)被稱作偽 隨機(jī)數(shù)。偽隨機(jī)數(shù)是以相同的概率從一組有限的數(shù)字中選取的。所選數(shù) 字并不具有完全的隨機(jī)性,但是從實(shí)用的角度而言,其隨機(jī)程度已足夠 了。偽隨機(jī)數(shù)的選 擇是從隨機(jī)種子開始的,所以為了保證每次得到的 偽隨機(jī)數(shù)都足夠地“隨機(jī)
2、”,隨機(jī)種子的選擇就顯得非常重要。如果隨機(jī) 種子一樣,那么同一個(gè)隨機(jī)數(shù)發(fā)生器產(chǎn)生 的隨機(jī)數(shù)也會(huì)一樣。一般地, 我們使用同系統(tǒng)時(shí)間有關(guān)的參數(shù)作為隨機(jī)種子,這也是.net Framework 中的隨機(jī)數(shù)發(fā)生器默認(rèn)采用的方法。我們可以使用兩種方式初始化一個(gè)隨機(jī)數(shù)發(fā)生器: 第一種方法不指定隨機(jī)種子,系統(tǒng)自動(dòng)選取當(dāng)前時(shí)間作為隨機(jī)種子 Random ro = new Random();第二種方法可以指定一個(gè) int 型參數(shù)作為隨機(jī)種子:int iSeed=10;Random ro = new Random(10);long tick = DateTime.Now.Ticks;Random ran = ne
3、w Random(int)(tick & 0 xffffffffL) | (int) (tick 32);這樣可以保證 99%不是一樣。之后,我們就可以使用這個(gè)Random類的對(duì)象來產(chǎn)生隨機(jī)數(shù),這時(shí) 候要用到RandomNext()方法。這個(gè)方法使用相當(dāng)靈活,你甚至可以指 定產(chǎn)生的隨機(jī)數(shù)的上下限。不指定上下限的使用如下:int iResult;iResult=roNext();下面的代碼指定返回小于100的隨機(jī)數(shù):int iResult;int iUp=100;iResult=roNext(iUp);而下面這段代碼則指定返回值必須在50-100 的范圍之內(nèi):int iResult;int iU
4、p=100;int iDown=50;iResult=roNext(iDown,iUp);除了 Ran do mNext ()方法之外,Ran dom類還提供了Ran domN extDouble()方法產(chǎn)生一個(gè)范圍在00-10之間的隨機(jī)的雙精 度浮點(diǎn)數(shù):double dResult;dResult=ro.NextDouble();但是用Random類生成題號(hào),會(huì)出現(xiàn)重復(fù),特別是在數(shù)量較小的題 目中要生成不重復(fù)的的題目是很難的,參考了網(wǎng)上的一些方法,包括兩 類,一類是通過隨機(jī)種子入手,使每一次的隨機(jī)種子不同,來保證不重 復(fù);第二類是使用一些數(shù)據(jù)結(jié)構(gòu)和算法。下面主要就第二類介紹幾個(gè)方 法。方法
5、1:思想是用一個(gè)數(shù)組來保存索引號(hào),先隨機(jī)生成一個(gè)數(shù)組位置, 然后把這個(gè)位置的索引號(hào)取出來,并把最后一個(gè)索引號(hào)復(fù)制到當(dāng)前的數(shù) 組位置,然后使隨機(jī) 數(shù)的上限減一,具體如:先把這100 個(gè)數(shù)放在一 個(gè)數(shù)組內(nèi),每次隨機(jī)取一個(gè)位置(第一次是 1-100,第二次是 1-99, .), 將該位置的數(shù)用最后的數(shù)代替。int index = new int15;for (int i = 0; i 15; i+)index = i;Random r = new Random();/用來保存隨機(jī)生成的不重復(fù)的 10 個(gè)數(shù)int result = new int10;int site = 15;/設(shè)置下限int id
6、;for (int j = 0; j 10; j+)id = r.Next(1, site - 1); /在隨機(jī)位置取出一個(gè)數(shù),保存到結(jié)果數(shù)組 resultj = indexid;/最后一個(gè)數(shù)復(fù)制到當(dāng)前位置indexid = indexsite - 1;/位置的下限減少一site-;方法 2 利用 Hashtable。NextPageHashtable hashtable = new Hashtable();Random rm = new Random();int RmNum = 10;for (int i = 0; hashtable.Count RmNum; i+)int nValue =
7、 rm.Next(100);if (!hashtable.ContainsValue(nValue) & nValue != 0) hashtable.Add(nValue, nValue);Console.WriteLine(nValue.ToString();方法 3:遞歸,用它來檢測(cè)生成的隨機(jī)數(shù)是否有重復(fù),如果取出來的數(shù)字和已取得的數(shù)字有重復(fù)就重新隨機(jī)獲取。Random ra=new Random(unchecked(int)DateTime.Now.Ticks); int arrNum=new int10;int tmp=0;int minValue=1;int maxValue=10;for (int i=0;i10;i+)tmp=ra.Next(minValue,maxValue); /隨機(jī)取數(shù)arrNum=getNum(arrNum,tmp,minValue,maxValue,ra); /取 出值賦到數(shù)組中public int getNum(int arrNum,int tmp,int minValue,int maxValue,Random ra)int n=0;while (n=arrNum.Length-1)if (arrNumn=tmp) /利用循環(huán)判斷是否有重復(fù)tm
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 親子教育項(xiàng)目居間合同樣本
- 電影院裝修服務(wù)合同范本
- 農(nóng)藥購銷合同樣本
- 三農(nóng)村公共環(huán)境治理體系建設(shè)指南
- 生產(chǎn)管理實(shí)務(wù)操作流程詳解
- 網(wǎng)絡(luò)教育技術(shù)運(yùn)用與發(fā)展趨勢(shì)研究報(bào)告與指導(dǎo)書
- 鋼化玻璃采購合同書
- 購買豆腐的合同
- 2025年陽江b2貨運(yùn)上崗證模擬考試
- 小學(xué)三年級(jí)上冊(cè)口算練習(xí)500題
- 2024年臨床醫(yī)師定期考核試題中醫(yī)知識(shí)題庫及答案(共330題) (二)
- 《住院患者身體約束的護(hù)理》團(tuán)體標(biāo)準(zhǔn)解讀課件
- 《上消化道出血診療指南》講稿
- 電商部售后客服績效考核表
- 小提琴協(xié)奏曲《梁?!纷V
- 人教版高中化學(xué)必修一第一章《物質(zhì)及其變化》教學(xué)課件
- 復(fù)工復(fù)產(chǎn)工作方案范本【復(fù)產(chǎn)復(fù)工安全工作方案】
- HyperMesh100基礎(chǔ)培訓(xùn)教程
- 化工裝置實(shí)用操作技術(shù)指南講解
- 春季高考英語《大綱短語》(218個(gè)核心詞匯相關(guān)短語)
- 護(hù)理文書書寫規(guī)范ppt課件
評(píng)論
0/150
提交評(píng)論