C 短時間內產生不大量重複的隨機數

2021-06-28 04:59:45 字數 3100 閱讀 8946

在c#程式設計中,經常會碰到產生隨機數的情況,並且是在短時間內產生一組隨機數。如果這組隨機數中有大量重複的,則達不到我們的要求。生成隨機數可以用偽隨機數發生器random,受種子控制生成偽隨機數,預設以當前時間值為種子。如果程式執行的很快,就會導致在幾乎同一時刻執行多次,肯定會有重複的。比如我們要生成1到10之間的5個隨機數,則經常會產生 2 2 1 1 1這樣的情況,那麼如何得到非常隨機的不那麼重複的隨機數呢?比如 4 2 3 3 5這樣的。

有人說用thread.sleep(5) ,但我不推薦,因為這樣會使系統減緩執行。

我採取的方法是:用種子guid.newguid().gethashcode(),在短時間裡不會出現大量重複。

以下**中,得到的是1到20之間的10個隨機數(不包括20)。陣列a、b、c分別採用不同的方法產生隨機數,陣列a和b均呼叫了方法randbit,不同的是陣列a多傳了乙個引數i改變隨機數的種子,陣列b用的方法是我在程式設計中經常用到的,即通過呼叫乙個方法來產生隨機數,非常方便。陣列c採用的方法也可以,但在實際程式設計中很少用到。陣列d類似於陣列c,只是產生的是0,1之間的隨機數。

**如下:

[c-sharp]view plain

copy

using

system;  

using

system.collections.generic;  

using

system.linq;  

using

system.text;  

namespace

for(i = 0; i < 10; i++)  "+ 

"] = /r"

, i, a[i]);  

}  console.writeline("/r"

);  

for(i = 0; i < 10; i++)  "+ 

"] = /r"

, i, b[i]);  

}  console.writeline("/r"

);  

for(i = 0; i < 10; i++)  "+ 

"] = /r"

, i, c[i]);  

}  console.writeline("/r"

);  

for(i = 0; i < 10; i++)  "+ 

"] = /r"

, i, d[i]);  

}  console.readline();  

}  public

static

intrandbit(

inti, 

intj, 

intp)  

public

static

intrandbit(

inti, 

intj)  

}  }  

得到的結果為:

[c-sharp]view plain

copy

a[0] = 8  

a[1] = 13  

a[2] = 13  

a[3] = 17  

a[4] = 5  

a[5] = 1  

a[6] = 15  

a[7] = 14  

a[8] = 16  

a[9] = 3  

b[0] = 9  

b[1] = 13  

b[2] = 11  

b[3] = 1  

b[4] = 2  

b[5] = 15  

b[6] = 5  

b[7] = 11  

b[8] = 6  

b[9] = 13  

c[0] = 9  

c[1] = 16  

c[2] = 6  

c[3] = 1  

c[4] = 1  

c[5] = 14  

c[6] = 14  

c[7] = 12  

c[8] = 17  

c[9] = 18  

d[0] = 0.8177258  

d[1] = 0.998677  

d[2] = 0.6717096  

d[3] = 0.3508099  

d[4] = 0.944403  

d[5] = 0.7056777  

d[6] = 0.1024248  

d[7] = 0.2304256  

d[8] = 0.1107363  

d[9] = 0.5068604  

以下是我參考的別人的**:

[c-sharp]view plain

copy

usingsystem;     

usingsystem.collections.generic;     

usingsystem.text;     

namespacetester     

", datetime.now.tostring(

"yyyy-mm-dd hh:ss fff"

)));     

list>numbers=program.getrandom(1,1000);     

for(inti=0; i

console.writeline(string.format("結束時間"

, datetime.now.tostring(

"yyyy-mm-dd hh:ss fff"

)));     

console.readline();     

}     

//////返回一組唯一不重複的隨機數   

//////最小值

///最大值

///返回一組唯一不重複的隨機數

publicstaticlist>getrandom(intminvalue,intmaxvalue)     

numbers.add(item);     

}     

returnnumbers;     

}     

}     

}     

C 短時間內產生不大量重複的隨機數

在c 程式設計中,經常會碰到產生隨機數的情況,並且是在短時間內產生一組隨機數。如果這組隨機數中有大量重複的,則達不到我們的要求。生成隨機數可以用偽隨機數發生器random,受種子控制生成偽隨機數,預設以當前時間值為種子。如果程式執行的很快,就會導致在幾乎同一時刻執行多次,肯定會有重複的。比如我們要生...

C 短時間內產生大量不重複的隨機數

生成隨機數可以用偽隨機數發生器rand程式設計客棧om,受種子控制生成偽隨機數,預設以當前時間值為種子。如果程式執行的很快,就會導致在幾乎同一時刻執行多次,肯定會有重複的。比如我們要生成1到10之間的5個隨機程式設計客棧數,則經常會產生 2 2 1 1 1這樣的情程式設計客棧況,那麼如何得到非常隨機...

socket短時間內重連需注意的問題

socket短時間內重連需注意的問題 設定好監聽socket後,將socket的屬性設定為可重複使用位址,如 建立監聽socket socketlisten new socket addressfamily.internetwork,sockettype.stream,protocoltype.tc...