番外篇:隨機數·真
隨機數函式是什麼?
利用函式,生成一個特定區間內的隨機大小的整數。
隨機數的日常應用:
1、給題目出資料
2、打表蒙答案
3、小遊戲
=============================================================
函式介紹:
因為隨機數的本質是函式的應用,先介紹要用的幾個函式
1、rand()//生成函式//需要<cstdlib>標頭檔案
2、srand()//初始化函式
3、time()//獲取系統時間函式 //需要 <ctime>標頭檔案
=============================================================
例項程式碼:
生成一個在[ x ,y ) 區間內的隨機整數
樣例輸入: 100 500
樣例輸出:一個在100和499之間的隨機數。
#include<cstdio> #include<ctime>//獲取時間函式要用到 #include<cstdlib>//rand函式要用 int main() { int x,y,k,t; scanf("%d %d",&x,&y);//區間在[x,y) t=y-x; srand(time(0));//初始化 k=rand()%t;//獲取隨機數 k+=x;// 確認區間 printf("%d",k); return 0; }
如果你只需要一個拿來就用的工具,恭喜你,已經獲得了!!
==================後面都是廢話,不用再往下看了!================
=============================================================
=============================================================
=============================================================
=============================================================
=============================================================
我
是
懶
惰
的
普
通
人
和
勤
奮
又
帥
得
讓
人
欲
罷
不
能
的
大
神
之
間
的
分
割
線
=============================================================
例項分析:
1、rand()函式其實是一個偽隨機整數序列,每次產生的是0~RAND_MAX(該值與平臺有關,至少為32767),之間的隨機數,但其產生的隨機數時偽隨機數,預設隨機數種子為0,所以每次重新執行程式,都會產生相同的隨機數。測試程式碼如下:
#include<cstdio>
#include<cstdlib>//rand函式要用
int main()
{
int k;
k=rand();//獲取隨機數
printf("%d",k);//輸出
return 0;
}
2、srand()//初始化函式
為了解決多次生成的時候,數字能夠隨機變動,需要一個每次都不同的種子,
也就是說:srand()函式引數,如果有一個每次不同的數字,它就能幫助 rand()函式;
srand(請給我一個每次不同的數字放這裡)。
為了能夠獲得一個每次都不同的數字,呼叫系統時間!
3、time()//獲取系統時間函式
時間戳,指格林威治時間1970年01月01日00時00分00秒(北京時間1970年01月01日08時00分00秒)起至現在經過了多少秒。
在C語言中可以通過time()函式獲取到當前的秒數,引數為0則函式返回值即為結果,若引數不為0則結果儲存在引數中。
程式碼如下:
#include<cstdio>
#include<ctime>//獲取時間函式要用到
int main()
{
int t=time(0);//獲取當前時間秒數
printf("%d\n",t);//輸出
int h,s,m;
s=t%60;
m=t%3600/60;
h=(t%(24*3600)/3600+8)%24;
printf("%02d:%02d:%02d\r",h,m,s);//換算回時分秒顯示
return 0;
}
4、,有了隨機函式,又有了種子,那麼我們就可以生成真正意義的隨機數了!
ps:由於平臺的限制,範圍在0到2^16之間,也就是rand()返回的值不會大於32767。
4.1 如果要生成一個 1-1000 之間的隨機數,只要 rand()%1000 ;
4.2 如果要生成一個 1000-1500 之間的隨機數,需要 rand()%500+1000 //在1000的基礎上,加上500以內的隨機數;
4.3 如果要生成一個超過32767的隨機數,需要 x=rand(),然後對 x 進行適當的加法或者乘法運算;
4.4 如果要生成一個帶小數的隨機數,就是 int 型別和 double 型別之間的轉化問題了。
到這裡,您大概明白真正的隨機數怎麼玩了嗎?
請回文章頂部拿完整程式碼去玩耍吧!