C C 中隨機取數程式

2021-04-29 02:13:41 字數 1842 閱讀 2161

在計算機中並沒有乙個真正的隨機數發生器,但是可以做到使產生的數字重複率很低,這樣看起來好象是真正的隨機數,實現這一功能的程式叫偽隨機數發生器。 

有關如何產生隨機數的理論有許多,如果要詳細地討論,需要厚厚的一本書的篇幅。不管用什麼方法實現隨機數發生器,都必須給它提供乙個名為「種子」的初始值。而且這個值最好是隨機的,或者至少這個值是偽隨機的。「種子」的值通常是用快速計數暫存器或移位暫存器來生成的。

下面講一講在c語言裡所提供的隨機數發生器的用法。現在的c編譯器都提供了乙個基於ansi標準的偽隨機數發生器函式,用來生成隨機數。它們就是rand()和srand()函式。這二個函式的工作過程如下:

1) 首先給srand()提供乙個種子,它是乙個unsigned int型別,其取值範圍從0~65535;

2) 然後呼叫rand(),它會根據提供給srand()的種子值返回乙個隨機數(在0到32767之間)

3) 根據需要多次呼叫rand(),從而不間斷地得到新的隨機數;

4) 無論什麼時候,都可以給srand()提供乙個新的種子,從而進一步「隨機化」rand()的輸出結果。

取0或1兩個隨機數:

#include

#include

....

srand( (unsigned)time(null) ); //隨便呼叫一次。

int getnum()

這樣不斷呼叫getnum()就會是0、1、0這樣不停的隨機選擇下去。

擴充套件:**:http://www.hinn.cn/2008/03/cc_random.html

c語言/c++怎樣產生隨機數:這裡要用到的是rand()函式, srand()函式,c語言/c++裡沒有自帶的random(int number)函式。

(1) 如果你只要產生隨機數而不需要設定範圍的話,你只要用rand()就可以了:rand()會返回一隨機數值, 範圍在0至rand_max 間。rand_max定義在stdlib.h, 其值為2147483647。

例如:

#include

#include

void main()

(2) 如果你要隨機生成乙個在一定範圍的數,你可以在巨集定義中定義乙個random(int number)函式,然後在main()裡面直接呼叫random()函式:

例如:隨機生成10個0~100的數:

#include

#include

#define random(x) (rand()%x)

void main()

(3)但是上面兩個例子所生成的隨機數都只能是一次性的,如果你第二次執行的時候輸出結果仍和第一次一樣。這與srand()函式有關。 srand()用來設定rand()產生隨機數時的隨機數種子。在呼叫rand()函式產生隨機數前,必須先利用srand()設好隨機數種子 (seed), 如果未設隨機數種子, rand()在呼叫時會自動設隨機數種子為1。上面的兩個例子就是因為沒有設定隨機數種子,每次隨機數種子都自動設成相同值1 ,進而導致rand()所產生的隨機數值都一樣。

srand()函式定義 : void srand (unsigned int seed);

通常可以利用geypid()或time(0)的返回值來當做seed

如果你用time(0)的話,要加入標頭檔案#include

例如:

#include

#include

#include

#define random(x) (rand()%x)

void main()

這樣兩次執行的結果就會不一樣了

從列表中隨機取數

列表為 a j g h k i l f v b 2 5 x 版本1 import numpy as np word list a j g h k i l f v b 2 5 x len list range len word list 將列表生成字典,key為元列表的id序號,values為對應序號...

隨機取數問題

問題描述 輸入兩個正整數m和n m n 輸出乙個有m個隨機數組成的隨機列表,這些隨機數的範圍時0 n 1,並且每乙個整數只能出現一次。方法一 o n 整體來說,從n個整數中隨機選擇m個不重複整數,選擇每乙個整數的概率都是m n,因此在進行選擇時,需要保證每個整數被選擇的概率是m n就能滿足問題要求。...

隨機取數問題

問題描述 輸入兩個正整數m和n m n 輸出乙個有m個隨機數組成的隨機列表,這些隨機數的範圍時0 n 1,並且每乙個整數只能出現一次。方法一 o n 整體來說,從n個整數中隨機選擇m個不重複整數,選擇每乙個整數的概率都是m n,因此在進行選擇時,需要保證每個整數被選擇的概率是m n就能滿足問題要求。...