生成隨機資料

2022-09-05 08:57:10 字數 2626 閱讀 5765

生成隨機資料

一.生成int型資料

簡單地生成n個隨機資料(數字大小在int範圍內)

#include

#include

#include

int main()

每次執行該程式得到的隨機數都是一樣的,因為種子相同

改變種子,每次執行程式可以得到不同的隨機數

得到種子需要乙個函式srand(m);  引數m決定了種子,那麼每次執行的時候我們需要改變m以便得到不同的種子,顯然很麻煩,所以我們可以自動生成種子,就是使用乙個time()函式,以當前時間來作為種子

#include

#include

#include

#include

int main()

生成範圍在[a,b]以內的隨機資料

先說簡單的,如果是要生成[0,b]以內的資料那麼只要對b+1取模即可

#include

#include

#include

#include

int main()

如果是[a,b]型別的(即a不為0),有多種處理方法,這裡只提供一種方法,就是多次取隨機數直到滿足要求為止,當然也可以用其他方法最常見就是用數學處理

#include

#include

#include

#include

int main()

while(!(t>=a && t<=b));

printf("%d  ",t);}}

printf("\n");

return 0;

}不重複生成隨機資料

上面的程式中都可以看到資料中經常出現重複的情況,為了解決重複的問題可以採用標記的方法

一種是,把需要用到的資料事先儲存在乙個陣列中(某些情況下我們是確定知道我們需要用到哪些資料(例如我們需要[0,10000]裡面的數字),只是對於它們的出現順序我們希望得到乙個隨機的結果,並且每個資料只出現一次),然後隨機生成資料r,r並不是我們要的資料,而是陣列下標,我們需要的是事先儲存下來的a[r],並且標記used[r]=1,表示下標r的資料已經用過,所以對於已經用過的資料我們不能再次使用,必須重新計算得到乙個新的隨機數字r,或者使用其他方法得到乙個沒有用過的r

#include

#include

#include

#include

#define n 100010

int num[n],used[n];

int main()

//將[0,100]以內的奇數先事先儲存在num陣列中

//隨機輸出num陣列裡面的資料每個資料僅輸出一次

//(也就是輸出100以內的奇數每個只輸出一次)

srand((int)time(0));

for(int i=0; i

else

while(used[r]);

used[r]=1; printf("%d ",num[r]);}}

printf("\n");

return 0;

}二.生成浮點型資料

乙個不太嚴謹的方法是直接

小於1的浮點數,rand() /(double)rand_max;

0~10的浮點數,則修改為rand() /(double)(rand_max/10);

0~100浮點數,則修改為rand() /(double)(rand_max/100)

......以此類推

其中rand_max是乙個數值,windows系統下一般為32767,rand()的數值範圍在rand_max以內

還有一種方法是,先隨機出乙個整數,再隨機出乙個小數,然後兩個數相加

還有乙個方法是每次隨機得到個位數然後不斷作為個位,十位,百位,千位……這樣就構建好了整數部分,然後再用相同的方法來構建小數部分,整數部分加上小數部分就得到了我們要的隨機數

三.生成字元型資料

字元型資料我們可以轉化為ascii碼來處理,以下面的例子來說明

我們需要生成20個字串,每個字串佔1行。對於每個字串,長度範圍在[1,10],每個字串可以包含的字元包括0到9,26個大小寫字母,也就是只可能出現62種不同的字元

解決方法,我們先將62個字元儲存在乙個字元陣列string中,然後我們隨機生成乙個數字len,表示當前字串的長度(記得取模保證len在[1,10]範圍內),然後迴圈len次,每次生成乙個字元。生成字元的方法是,隨機生成乙個數字r,然後讀取string[r]裡面的單個字元。

#include

#include

#include

#include

#define n 110

char string[n]=;

int main()

//得到當前字串的長度

while(!(len>0));

for(int j=1;

j<=len; j++)

printf("%c",string[rand()%(62)]);

printf("\n");

}return 0;

}當然我們可以直接生成乙個隨機數字r(記得模256+1),然後讀取ascii碼為r的字元,但是這種方法不推薦

隨機生成隨機數

現畫乙個command命令按鈕,進行貼上。private sub command1 click show me scale 0,0 18,8 me.auto redraw true me.draw mode 2 circle 3,4 3,vb red me.auto redraw false lin...

隨機資料生成器

小奔資料生成器 請仔細閱讀下方提示!生成資料共有4步 請嚴格按照指示操作!include include include include include include include using namespace std char num 3 void chgnum int n 第一步 把你的s...

隨機資料生成器

小奔資料生成器 請仔細閱讀下方提示!生成資料共有4步 請嚴格按照指示操作!include include include include include include include using namespace std char num 3 void chgnum int n 第一步 把你的s...