C語言生成隨機數

2021-09-11 10:35:04 字數 1693 閱讀 9239

1、關於c語言中有rand()函式來產生隨機數,但是初始seed為1,這樣做有乙個問題,即會產生固定序列的數,比如單獨呼叫rand()時會產生

1804289383 846930886 1681692777 1714636915 1957747793 424238335 719885386 1649760492 596516649 1189641421…

即使在其他程序中執行也會得到相同的序列;如果得到的資料可以**,那麼就不是真正的隨機數了,因為你永遠不知道你擲色子的下一次是什麼數;為了避免這種「尷尬」的隨機數生成方式,需要使用不同的seed;

一般實現方法是通過srand(unsigned seed)來設定,通常使用time()函式作為seed引數

使用形式:srand((unsigned)time(null));

2、關於生成[start_num, end_num]的隨機數

#include #include #include int main(int argc, char *ar**) 

start_num = atoi(ar**[1]);

end_num = atoi(ar**[2]);

if (start_num >= end_num)

srand((unsigned)time(null));

for(i = 0; i < end_num - start_num + 1; i++)

printf("%d ", rand() % (end_num - start_num + 1) + start_num);

printf("\n");

return 0;

}

3、關於生成不重複[start_num, end_num]的隨機數

#include #include #include int main(int argc, char *ar**) 

start_num = atoi(ar**[1]);

end_num = atoi(ar**[2]);

if (start_num >= end_num)

srand((unsigned)time(null));

a = (int *)malloc((end_num - start_num + 1) * sizeof(int));

for (i = start_num; i < end_num + 1; i++)

for (i = start_num; i < end_num + 1; i++)

for(i = 0; i < end_num - start_num + 1; i++)

printf("%d ", a[i]);

printf("\n");

free(a);

a = null;

return 0;

}

其中最主要的演算法是:首先生成乙個從[start_num, end_num]的陣列,這樣就會保證陣列裡面的數不會重複,那麼如何使這個陣列的排好的序隨機呢?這裡的解決辦法是使用rand()來生成乙個隨機數組序號,使用自增的方式遍歷整個陣列,然後交換rand()生成的隨機數組序號的a[rand_index]和當前的a[i - start_num],實際上就類似於隨機拿乙個排好序的序列中的乙個數和序列中另乙個數交換位置,這樣序列就被隨機打亂,隨機交換的次數當然也可以隨機;序列中的數值是不會變的(即不重複);如此便能實現不重複隨機數序列;

C語言隨機數的生成

在程式設計中,我們經常需要生成隨機數,例如,貪吃蛇遊戲中在隨機的位置出現食物,撲克牌遊戲中隨機發牌等。在c語言中,我們一般使用 標頭檔案中的 rand 函式來生成隨機數,它的用法為 int rand void void 表示不需要傳遞引數。c語言中還有乙個 random 函式可以獲取隨機數,但是 r...

C 隨機數生成

using system using system.collections.generic using system.text namespace createrandomno return sb.tostring 生成大寫字母隨機數 public static string getabcpwd i...

C 隨機數生成

標準庫 被包含於中 提供兩個幫助生成偽隨機數的函式 函式一 int rand void 從srand seed 中指定的seed開始,返回乙個 seed,rand max 0x7fff 間的隨機整數。函式二 void srand unsigned seed 引數seed是rand 的種子,用來初始化...