C語言rand()函式產生隨機數
#include <stdlib.h>
#include <time.h>
int main()
{ int i;
srand((unsigned)time(NULL));
for (i=0;i<10;i++) printf("%d\n",rand()%6+1);
return 0;
} //產生1~6之間的隨機數;
執行結果:
函式一:int rand(void);
返回一個[0,RAND_MAX]間的隨機整數。
函式二:void srand(unsigned seed);
引數seed是srand()的種子,用來初始化srand()的起始值。
系統在呼叫rand()之前都會自動呼叫srand(),如果在srand()裡給引數seed指定了一個值(這裡指定的值是當前時間),那麼 rand()就會將seed的值作為產生偽隨機數的初始值;而如果使用者在rand()前沒有呼叫過srand(),那麼系統預設將1作為偽隨機數的初始值,如果初始值是此時的1或是其他定值,那麼每次rand()產生的隨機數序列都是一樣的,這也就是所謂的“偽隨機數”。
值得注意的是,如果srand()括號中沒有argument的話,程式是會報錯的,因為在函式原型中,srand()函式是要求加上內容的。簡而言之,即有如下點:
- rand()函式可以生成一個[0,RAND_MAX]間的隨機整數;
(ISO IEC 9899 2011 (C11)標準中未規定 RAND_MAX 的具體數值。但該標準規定了RAND_MAX 的值應至少為32767。程式設計的時候,不應該對 RAND_MAX 的具體數值做任何假設。)
- srand()可以被認為是為rand()的“偽隨機數”的結果指定一個固定的序列,若未引用srand()函式,則程式預設srand()括號中的值為1;如果引用的話,srand()括號中不能為空;
- 為了確保生成的隨機數為儘可能符合概率上的隨機,需要呼叫一個函式time()
(是指返回自 Unix 紀元(January 1 1970 00:00:00 GMT)起的當前時間的秒數的函式,主要用來獲取當前的系統時間,返回的結果是一個time_t型別)
,這個函式包含在標頭檔案time.h裡,在生成隨機數的呼叫下需強制型別轉換為(unsigned)time(),後面一個括號中必須填入(unsigned)time(NULL)或(unsigned)time(0)。 - 如果你要求產生的隨機數在某一範圍X~Y之內的話,只需要做如下處理即可:rand()%(X-Y+1)+X;
再來舉一個例子吧:死亡的 cyk
Time Limit: 1000 ms Memory Limit: 65536 KiBSpecial Judge
Problem Description
復仇者聯盟沒有能夠阻止滅霸那個毀滅一半生命的響指,宇宙中一半的生命就此消失。有一個遙遠的星球: cyk 星,也不可避免的死亡了一半的 cyk 。
cyk 星上一共有 6 個 cyk
- cyk0
- cyk1
- cyk2
- cyk3
- cyk4
- cyk5受到滅霸響指的影響,死去了 3 個 cyk ,現在請你給出死去的這 3 個 cyk 的名字。
Input
沒有輸入。
Output
每行一個,輸出死去的 cyk 的名字,順序不限。
Sample Input
Sample Output
cyk0 cyk1 cyk2
Hint
注意:每次提交題目都對應一個新的平行世界,因此死亡的 cyk 與其他世界的可能不同,但一定是 3 個(這句話的意思就是一次提交程式碼能不能AC完全看你個人運氣,但如果你程式碼沒問題,那你早晚會AC,時間問題。本人提交10次AC)Source
MeiK
程式碼如下:#include<stdio.h> #include<stdlib.h> #include<time.h> int main() { srand((unsigned)time(NULL)); int i,k[100],j,flag=1; for(i=0; i<3; i++) k[i]=rand()%6+0; while(flag) { flag=0; for(i=0; i<3; i++) for(j=i+1; j<3; j++) { if(k[j]==k[i]) { k[j]=rand()%6+0; flag=1; } } } for(i=0; i<3; i++) { if(i==2) printf("cyk%d",k[i]); else printf("cyk%d\n",k[i]); } }
相關推薦
C語言rand()函式產生隨機數
#include <stdlib.h> #include <time.h> int main() { int i; srand((unsigned)time(NULL)); for (i=0;i<10;i++) pri
C語言 rand函式生成隨機數
在實際的專案中,有時候需要生成一個隨機數,在C語言中隨機數的生成可以通過使用rand函式來實現。 rand函式包含在標頭檔案stdlib.h裡,因此使用rand函式需要宣告包含stdlib.h。 #include<stdlib.h> #inc
在C語言中如何產生隨機數
簡單的產生0~100隨機數的程式碼如下: #include<stdio.h> #include<time.h> void main() { int i=0,j=0;
C語言,如何產生隨機數(各種轉載)
1. 基本函式 在C語言中取隨機數所需要的函式是: intrand(void);voidsrand(unsignedintn); rand()函式和srand()函式被宣告在標頭檔案stdlib.h中,所以要使用這兩個函式必須包含該標頭檔案:
思考中rand()函式產生隨機數需不需要srand()的發現
“在程式中每次呼叫rand()產生的數字都相同”這是不對的!!要知道為什麼不對,還是先說明一下rand()函式吧,rand()函式是會用系統提供的種子(沒有用srand()提供時)或者srand()提供的種子計算出一組隨機數,嗯,是一組!而不是一個!!可以把這一組數看做是儲存
關於c語言rand產生隨機數相同的問題(學習筆記)
函式rand是真正的隨機數生成器(可以產生從0到32767的隨機數),而srand會設定供rand使用的隨機數種子。呼叫rand()之前沒有呼叫srand(),系統就主動呼叫srand(),導致產生同樣的隨機數(隨機數種子相同)。/*常常使用:srand(time(NULL)
C語言中如何產生一個隨機數及其原理。
在C語言中,rand()函式可以用來產生隨機數,但是這不是真真意義上的隨機數,是一個偽隨機數,是根據一個數,我們可以稱它為種子,為基準以某個遞推公式推算出來的一系數,當這系列數很大的時候,就符合正態公佈,從而相當於產生了隨機數,但這不是真正的隨機數,當計算機正常開機後,這
matlab的rand()函式產生均勻分佈函式的正確用法 / matlab 中如何產生0-1上均勻分佈的隨機數
簡介 rand(m,n)會產生mxn大小的矩陣,矩陣的每個元素符合0~1的均勻分佈。 rand(n)會產生一個維度是n的列向量,每個元素符合0~1的均勻分佈。 rand()函式會返回一個0~1之間的隨機數。 Fr: http://blog.csdn.net/lioncv/
rand()函式產生的隨機數為什麼是偽隨機數?
偽隨機數生成器將作為“種子”的數當作初始整數傳給函式。這粒種子會使這個球(生成偽隨機數)一直滾下去。偽隨機數生成器的結果僅僅是不可預測。由偽隨機數生成器返回的每一個值完全由它返回的前一個值所決定(最終,該種子決定了一切)。如果知道用於計算任何一個值的那個整數,那麼就
C++猜數字遊戲的程式,用srand()函式產生隨機數
/* 編寫一個猜數字遊戲的程式:程式隨機選擇一個1到1000的數,然後輸出: I have a number between 1 and 1000. Can you guess
C語言 trim函式實現
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> //去除尾部空格 char *rtrim(char *str) { if(str == N
C語言中函式宣告、形參、實參
函式原型: 原型prototype是函式的宣告;描述了函式的返回值與引數; 函式原型說明了兩點: 1、該函式的返回值 2、該函式的引數及其型別 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 函式的引數: 引數到底是什
C語言isalpha函式
看程式碼: #include<ctype.h> #include<stdio.h> #include <iostream> using namespace std; int main(void){ char ch; int tot
c 語言 用函式遞迴來實現求 k 的 n 次方
如果求取k的n次方,既可以用普通的方法實現,也可以用函式的遞迴來實現。 函式的遞迴即是自己呼叫自己的函式應用形式,即在main函式下定義一個函式,然後在這個函式內自己為了實現某個目的,函式
用C語言探究函式遞迴的巧妙之處(以斐波那契數列為例)
對於許多C語言的初學者來說,函式是一個比較重要的版塊.函式的使用不僅在學習程式設計的時期可以方便我們解決一些問題.它在未來的工作中也是程式設計師們經常運用的東西.而函式的遞迴是函式這一版塊比較難懂的東西.因此小編以輸出斐波那契數列的第N項為例,來探討函式的遞迴的應用給我們的程式碼帶來的方便.
C語言 strrev函式
標頭檔案:#include<string.h> strrev()函式將字串逆置,其原型為: char *strrev(char *str); 【引數說明】str為要逆置的字串。 strrev()將str所指的字串逆置。 【返回值】返回指向逆置後的字串的指標。 strr
C語言庫函式(侵刪)
1.strlen 標頭檔案:#include <string.h> strlen()函式用來計算字串的長度,其原型為:unsigned int strlen (char *s); s為指定的字串 #include<stdio.h> #include<
C語言assert函式完全攻略
斷言assert函式,C語言assert函式完全攻略 對於斷言,相信大家都不陌生,大多數程式語言也都有斷言這一特性。簡單地講,斷言就是對某種假設條件進行檢查。在 C 語言中,斷言被定義為巨集的形式(assert(expression)),而不是函式,其原型定義在<assert.h>檔
C語言read函式的那些坑
今天在複習UNIX檔案系統,用到那個read函式,但是無意中卻掉到一個坑裡了,用了一個多小時才找到問題根源,這裡記錄一下。 問題是這樣的:我需要使用read和write函式把鍵盤輸入的資訊複製到輸出。所以我寫了如下程式: #include<stdio.h> #define MAX
linux下的c語言系統函式呼叫
目錄 4.linux下的系統函式的使用 c語言 4.1數學函式的使用 1pow函式 2.exp函式 3.log函式 4.rand()隨機數函式 4.2字元函式的使用 4.3系統時間與日期函式的使用 系統時間 時間間隔 4.4環境控制函式 &nb