1. 程式人生 > >C#產生一組不重複隨機數的兩種方法

C#產生一組不重複隨機數的兩種方法

最近在開發專案的過程中,需要產生一些隨機數,如果我們簡單的用C#中的Random.Next方法,很難產生一組少重複的隨機數(當然是偽隨機數),在網上也看了很多方法,貌似也不可行,或者比較複雜。於是,參考網上的一些方法,自己寫了兩個個產生一組偽隨機數的方法。

方法一的程式碼如下:

其中,iMax表示最大範圍,iNum是產生的隨機數個數。

利用這種方法,得到了一組範圍(0...iMax)之間的偽隨機數,很少有重複的資料,這種方法得到的是一個有某種規律的隨機數序列。

分析其中的原因,其實是因為每次植入的種子不一樣,主要是因為 i 的變化,在.Net平臺,ticks數在一段時間內其實是一個定值,因此,雖然這種方法得到了一組隨機數,但是可能得到的資料之間有某種規律。

方法二的程式碼如下:

第二種方法也變換了種子,倒數第三行的Next方法中可以輸入任意大小的引數。這種方法得到的隨機數相比方法一要更好一些。

相關推薦

C#產生重複隨機數方法

最近在開發專案的過程中,需要產生一些隨機數,如果我們簡單的用C#中的Random.Next方法,很難產生一組少重複的隨機數(當然是偽隨機數),在網上也看了很多方法,貌似也不可行,或者比較複雜。於是,參考網上的一些方法,自己寫了兩個個產生一組偽隨機數的方法。 方法一的程式碼如

產生重複隨機數的高效演算法

需要從 0 到 n 之間選 k 個不重複的陣列成一個序列。 最早我想的是用一個輔助陣列記錄之前已經產生的隨機數,如果當前產生的隨機數已經出現過就再重新隨機。 顯然這樣的實現效率是很低的,設想從10000個數中隨機產生10000個數的序列,當前面9999個數已

高效產生重複隨機數

我後來採用了一個改進的辦法是,如果當前產生的隨機數a已經在之前產生過了,就順序去找比a小的數,直到找到一個之前沒有產生過的數,如果找不到就找比a大的數。 可以看到這樣的改進節省了大量的時間,但是這樣產生的已經不是隨機數序列了! 試想從1,2,3,4中隨機挑選2個數,假如第一次選出來的是3,那麼第二次再選的話

js數去重的方法

遍歷 方法 doc 思路 i++ 代碼 數組去重 -- length 數組去重這種問題經常會遇到,解決方法也有很多,這裏就總結兩種比較常用的方法。 方法一 第一種方法的思路:遍歷數組裏的元素,由第一個元素開始依次按照順序與其後面的元素相比較,如果不同則不

vue學習之父子件通信方法

調用 http 自己 通信 one 不變 學習過程 eth 不可 初學vue,最常用及實用的就是父子組件之間的通信了,在此記錄一點自己的學習過程 方法一:props及$emit 父組件中先引入子組件,然後components裏面註冊組件,然後template裏調用,調用的時

C++】int轉換為string的方法(to_string、字串流)轉載

int轉換成string的兩種方法 第一種是to_string函式,這是C++11新增的,使用非常方便,簡單查了下:C++11標準增加了全域性函式std::to_string,以及std::stoi/stol/stoll等等函式(這幾個就是string轉int,long,以及long lo

p1059明明的隨機數方法

原題網址 在做這道題的時候剛開始想到的方法是初始化一個數組 然後將重複的數跳過 但是發現需要用捅排的思想來判斷有沒有出現過那個數 所以就出現了兩種輸出方式 但是核心思想都是開桶: #include<bits/stdc++.h> using name

PHPStorm設定xdebug工具除錯php(使用瀏覽器或使用瀏覽器方法)

PHP 設定除錯工具XDebug PHPStorm IDE - derrck - 部落格園  http://www.cnblogs.com/derrck/p/5195946.html Xdebug:

vs C++ 靜態庫 生成以及使用的方法

C++靜態庫的生成 1、 vs專案配置:選擇 靜態庫 2、 新建標頭檔案 add.h 3、 新建標頭檔案 add.cpp 4、 執行“生成解決方案”,工程DEBUG目錄如下: C++靜態庫的使用 方法一 1、 新建 win32控制檯應用程式 2、 專案屬性-->c/c

使用C++11實現執行緒池的方法

概述:什麼是執行緒池?    因為程式邊執行邊建立執行緒是比較耗時的,所以我們通過池化的思想:在程式開始執行前建立多個執行緒,這樣,程式在執行時,只需要從執行緒池中拿來用就可以了.大大提高了程式執行效率. 如何實現:    一般執行緒池都會有以下幾個部分構成: 1. 執行

C++】int轉換為string的方法(to_string、字串流)

記錄一下用到過的int轉換成string的兩種方法 第一種是to_string函式,這是C++11新增的,使用非常方便,簡單查了下:C++11標準增加了全域性函式std::to_string,以及std::stoi/stol/stoll等等函式(這幾個就是string轉i

C/C++中計算函式執行時間的方法

       在寫程式碼中,有時候我們需要評估某段程式碼或者函式的執行時間;方法就是在該段程式碼或者函式前面,記錄一個時間T1,在程式碼段或函式後面記錄時間T2,那其執行時間就是T2-T1,下面看看具體

C#實現匯入匯出Excel資料的方法詳解

這篇文章主要為大家詳細介紹了C#匯入匯出Excel資料的兩種方法,具有一定的參考價值,感興趣的小夥伴們可以參考一下本文為大家分享了C#匯入匯出Excel資料的具體程式碼,供大家參考,具體內容如下注:對於實體類物件最好新建一個並且繼承原有實體類,這樣可以將型別進行修改;方法一:

Android開啟QQ臨時會話以及鍵加群的方法

開啟QQ臨時會話 使用WPA介面,無需加其為好友就能和其進行會話 Tencent mTencent =Tencent.createInstance(Config.TENCENT_APPI

C++中類的例項化的方法

       首先建立一個類,如下: class Coordinate { public: int m_iX; int m_iY; };     下面就是例項化一個物件。 void main() { Coordinate coord[3]; //棧上 c

C++ 將int轉換為string的方法【to_string和sstream】

第一種是to_string函式,C++11新特性,使用非常方便,簡單查了下:c++11標準增加了全域性函式std::to_string,以及std::stoi/stol/stoll等等函式(這幾個就是

PHP 產生重複隨機數方法

1.首先通過rand()函式獲取一個長度固定的陣列。 例如:$numbers = rand(6,50); 這條語句是可以產生6到50個數字,是按順序排列的。 接著我們需要打亂這個順序,產生45個無序的陣列成一個數組,這時就需要用到php中的shuffle()函式。 例如:s

Python 產生特定範圍內重複多個隨機數方法

在近期進行的一個實驗中,需要將資料按一定比例隨機分割為兩個部分。這一問題的核心其實就是產生不重複隨機數的問題。首先想到的遞迴的方法,然後才發現Python中居然已經提供了此方法的函式,可以直接使用。具

C語言、Java方式下的——規定範圍內重複隨機數

示例1:C語言版 #include <stdio.h> #include <stdlib.h> #include <time.h> //隨機產生規定個數的不重複數字 int findSame(int *arr, int in, int

C語言,產生數字,並將其寫入txt文件中

#include<stdio.h> /*產生一組連續的數字,並將其寫到txt文件中*/ /*說明:本程式在在win10 系統64位下用Dev-C++ 5.11版本編譯器編譯的*/int main(){ int m=1; FILE *fp=NULL; fp=fopen("D:\\1.txt","