為什麼rand 函式生成的永遠是固定的數

時間 2022-07-11 10:10:02

1樓:

沒設定隨機種子

有時會自動根據系統時間設定隨機種子

用srand(隨機種子)函式設定隨機種子,通常以系統時間作為隨機種子,即srand(time(0))(須包含time.h庫)

電腦產生的隨機數都是偽隨機數,隨機種子一定時,產生的隨機數列也一定

2樓:匿名使用者

函式說明

srand()用來設定rand()產生隨機數時的隨機數種子。引數seed必須是個整數,通常可以利用geypid()或time(0)的返回值來當做seed。如果每次seed都設相同值,rand()所產生的隨機數值每次就會一樣。

3樓:黯閣梧桐一葉

生成隨機數的時候加個隨機數種子,一般用時間來做隨機數種子。

#include

srand((unsigned int)time(null));

4樓:匿名使用者

#include "stdlib.h"

#include "time.h"

#include "stdio.h"

int main()

5樓:匿名使用者

不會吧 rand就是生成隨機數的 哪出問題了 軟體卸了再裝一遍吧

rand()函式產生的隨機數為什麼是偽隨機數

objective-c中rand()總是產生固定值

6樓:匿名使用者

rand()本身就是偽隨機數的生成器,每次執行都會生成固定的數。

要想生成不同的數,就要用srand函式更換不同的seed。

7樓:匿名使用者

以當前時間為種子進行初始化,每次執行的時候,保證種子不一樣,那麼產生的序列也不一樣

不需要每次都去設定種子

8樓:匿名使用者

用 arc4random() 效果更好。

9樓:匿名使用者

考慮過使用其它的隨機函式嗎?如arc4random()

rand()函式生成的不是真正的隨機數嗎?

10樓:匿名使用者

這麼跟你說吧 rand函式生成的隨機數是根據一個叫做 隨機種子 的東西生成的

當隨內機種子沒有變化時,容rand出來的數是不變的隨機種子他有一個預設值 為了實現真正隨機我們就要改變它改變隨機種子的函式為 srand() 括號裡面帶一個整數然後真正意義的隨機就要 srand( time( 0 ) )time這個函式好像是返回現在時間

因為每時每刻 時間 都在變化 都不一樣 所以隨機種子也絕對不會相同就實現了真正的隨機

為什麼用rand()產生的隨機數每次都相同

11樓:可愛的小傻瓜

你設定的當前時間為隨機數種子,但是兩條**之間相差時間非常短,內所以種子是一樣的,隨容機數也就一樣。

你可以這樣:

srand(1);

magic1=rand()%10+1;

srand(200);

magic2=rnd()%10+1;

為什麼每次執行rand的結果都一樣?

12樓:匿名使用者

#include

...srand(time(0));

rand();

--------------

上述**每秒變一次,如果想每1/1000000秒變一次,加分!!!!

13樓:格里程式設計辦公技巧

在使用rand前加randomize();

14樓:青鳥中關村專家

rand函式不是真正的隨機數生成器,而srand()會設定供rand()使用的隨機數種子。如果你在第一次呼叫rand()之前沒有呼叫srand(),那麼系統會為你自動呼叫srand()。而使用同種子相同的數呼叫 rand()會導致相同的隨機數序列被生成。

srand((unsigned)time(null))則使用系統定時/計數器的值作為隨機種子。每個種子對應一組根據演算法預先生成的隨機數,所以,在相同的平臺環境下,不同時間產生的隨機數會是不同的,相應的,若將srand(unsigned)time(null)改為srand(tp)(tp為任一常量),則無論何時執行、執行多少次得到的「隨機數」都會是一組固定的序列,因此srand生成的隨機數是偽隨機數。

庫函式中系統提供了兩個函式用於產生隨機數:srand()和rand()。 原型為:

函式一:int rand(void);

返回一個[0,rand_max]間的隨機整數。

函式二:void srand(unsigned seed);

引數seed是rand()的種子,用來初始化rand()的起始值。

但是,要注意的是所謂的「偽隨機數」指的並不是假的隨機數。其實絕對的隨機數只是一種理想狀態的隨機數,計算機只能生成相對的隨機數即偽隨機數。計算機生 成的偽隨機數既是隨機的又是有規律的 —— 一部份遵守一定的規律,一部份則不遵守任何規律。

比如「世上沒有兩片形狀完全相同的樹葉」,這體現到了事物的特性 —— 差異性;但是每種樹的葉子都有近似的形狀,這正是事物的共性 —— 規律性。從這個角度講,我們就可以接受這樣的事實了:計算機只能產生偽隨機數而不是絕對的隨機數。

系統在呼叫rand()之前都會自動呼叫srand(),如果使用者在rand()之前曾呼叫過srand()給引數seed指定了一個值,那麼 rand()就會將seed的值作為產生偽隨機數的初始值;而如果使用者在rand()前沒有呼叫過srand(),那麼系統預設將1作為偽隨機數的初始 值。如果給了一個定值,那麼每次rand()產生的隨機數序列都是一樣的

所以為了避免上述情況的發生我們通常用srand((unsigned)time(0))或者srand((unsigned)time(null))來 產生種子。如果仍然覺得時間間隔太小,可以在(unsigned)time(0)或者(unsigned)time(null)後面乘上某個合適的整數。

為什麼生成的隨機數都是一樣的呢?

15樓:匿名使用者

srand函式每個來程式只需調源用一次,而不需要呼叫多次。要理解srand函式和rand函式的本質。

把srand放在迴圈體外面,否則,因為程式執行的很快,時間函式得到的值一樣,種子就一樣,所以,rand的結果也一樣了。

參考如下:

srand((unsigned int)time(null));

for (i=0; i

c++程式 rand()函式是產生隨機數的一個隨機函式,既然是隨機的那為什麼?生成的結果​老是一樣呢?

16樓:

#include

#include

#include

using namespace std;

int main()

{  const int n=10;

int a[n];

srand((unsigned)time(null));

for(int i=0;i

17樓:窮圖末錄

仔細看幫助吧,首先應該用srand(time(0))初始化隨機種子

rand本身屬於偽隨機數

18樓:匿名使用者

要想產生一個真正的隨機數是很難的,這個函式也僅僅是系統利用一些演算法幫你生成的而已,要是想每次都不一樣的話,可以給rand函式加個時間,即rand(time(null)),標頭檔案也加一下

用rand 函式,生成範圍1 1000,裝到a的陣列裡(就是生成不重複的數)

include include include define l 100 巨集定義一個陣列長度 int arr l p arr 宣告全域性static變數 void main 輸出隨機數 printf n100個1 1000的隨機序列如下 n for i 0 i include include in...

為什麼窮人就永遠是窮人,而富人他永遠是富人捏大神們幫幫忙

哈哈!誰告訴你的繆綸?一點都不靠譜!富人不去掙錢他還能是富人麼?窮人他不去掙錢他會變富麼?只要你真正想成為富人,並等價付出時你就一定是富人了。我看好你吆!採納哦 情愫 我給你點建議把 窮人家的小孩子在2 3歲的時候一般都在快樂的玩耍,富人的孩子已經開始每天學這學那,當讀書時一個放學了就高興的玩耍,一...

為什麼受傷的永遠是我

生活中,難免會遇到來自外界一些傷害,經歷多了,自然有了提防,可是,我們往往不會意識到,有種傷害是我們自己強加,為了一個小小職位,一件小事,甚至是為了他人閒言碎語,我們發愁,發怒,認真計較,糾纏於其中,久而久之,我們心靈就被折磨得千瘡百孔,對人世,對生活,失去了愛心。假如我們能不被那些功利所左右,保持...