隨機數都要設置種子嗎?


JAVA

java中產生隨機數的方法主要有三種:1:new Random()2:Math.random()3:currentTimeMillis()

1

public static void main(String[] args)
{    
  Random r = new Random(1);
  for(int i=0 ; i<5 ;  i++)
  {
    int ran1 = r.nextInt(100);
    System.out.println(ran1);
  }
}

 2

1     public static void main(String[] args)
2     {    
3         int max=100,min=1;
4         int ran2 = (int) (Math.random()*(max-min)+min); 
5         System.out.println(ran2);
6     }

 3

1     public static void main(String[] args)
2     {    
3         int max=100,min=1;
4         int ran2 = (int) (Math.random()*(max-min)+min); 
5         System.out.println(ran2);
6     }

 

C++

分開來說產生隨機數兩種方式:1使用srand;2直接rand生成 。

可以使用rand()函數產生隨機數。(rand()函數的頭文件在<cstdlib>中)

#include "iostream"
#include "cstdlib"
using name space std;
int main(){
cout<<rand()<<endl;
cout<<rand()<<endl;
return 0;

}

 

2

在程序中加入srand()隨機種子

#include "iostream"
#include "cstdlib"
using name space std;
int main(){
srand((unsigned)time(NULL));
cout<<rand()<<endl;
cout<<rand()<<endl;
return 0;

}

rand()產生的是偽隨機數字,每次執行時是相同的;若要不同,用函數srand()初始化它。

在一定范圍內產生隨機數:

要取得[a,b)的隨機整數,使用(rand() % (b-a))+ a; 
要取得[a,b]的隨機整數,使用(rand() % (b-a+1))+ a; 
要取得(a,b]的隨機整數,使用(rand() % (b-a))+ a + 1; 
通用公式:a + rand() % n;其中的a是起始值,n是整數的范圍。 
要取得a到b之間的隨機整數,另一種表示:a + (int)b * rand() / (RAND_MAX + 1)。 
要取得0~1之間的浮點數,可以使用rand() / double(RAND_MAX)。

srand用法:

srand函數是隨機數發生器的初始化函數。原型:void srand(unsigned seed);

用法:它初始化隨機種子,會提供一個種子,這個種子會對應一個隨機數,如果使用相同的種子后面的rand()函數會出現一樣的隨機數,如: srand(1); 直接使用1來初始化種子。不過為了防止隨機數每次重復,常常使用系統時間來初始化,即使用 time函數來獲得系統時間,它的返回值為從 00:00:00 GMT, January 1, 1970 到現在所持續的秒數,然后將time_t型數據轉化為(unsigned)型再傳給srand函數,即: srand((unsigned) time(&t)); 還有一個經常用法,不需要定義time_t型t變量,即: srand((unsigned) time(NULL)); 直接傳入一個空指針,因為你的程序中往往並不需要經過參數獲得的數據。

進一步說明下:計算機並不能產生真正的隨機數,而是已經編寫好的一些無規則排列的數字存儲在電腦里,把這些數字划分為若干相等的N份,並為每份加上一個編號用srand()函數獲取這個編號,然后rand()就按順序獲取這些數字,當srand()的參數值固定的時候,rand()獲得的數也是固定的,所以一般srand的參數用time(NULL),因為系統的時間一直在變,所以rand()獲得的數,也就一直在變,相當於是隨機數了。只要用戶或第三方不設置隨機種子,那么在默認情況下隨機種子來自系統時鍾。如果想在一個程序中生成隨機數序列,需要至多在生成隨機數之前設置一次隨機種子。 即:只需在主程序開始處調用srand((unsigned)time(NULL)); 后面直接用rand就可以了。不要在for等循環放置srand((unsigned)time(NULL));

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM