上一篇主題 :: 下一篇主題 |
發表人 |
內容 |
satanupup 喜歡上這裡的冒險者
註冊時間: 2007-05-29 文章: 80
68.10 果凍幣
|
發表於: 2009-3-25, AM 1:22 星期三 文章主題: 亂數C++ |
|
|
需include stdlib.h
數值=rand();
例:
取1-10的亂數 a=(rand()%10)+1;
取1-100的亂數 a=(rand()%100)+1;
取100-1000的亂數 a=(rand()%901)+100;
由上幾例可以歸納出來
要取 a~b 的亂數可以這麼寫:
(rand()%(b-a+1))+a
如果單用 rand 取亂數會發現取多次後會出現相同的亂數
這個時候就可以用其他技巧來幫忙
利用 srand() (定義在 stdlib.h)
用 srand 取亂數需要一個參數作為種子以產生新的亂數序列
而這個參數通常使用目前的時間傳入,這時候就需要用 time() (include <time.h>)
來幫忙。
利用 srand() (定義在 stdlib.h)
用 srand 取亂數需要一個參數作為種子以產生新的亂數序列
而這個參數通常使用目前的時間傳入,這時候就需要用 time() (include <time.h>)
來幫忙。
使用方法
在使用 rand 的前一行加上
srand(time(NULL));
ex:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void main()
{
int a;
srand(time(NULL));
a=(rand()%100)+1;
printf("The Random Number is %d .n", a);
} |
|
回頂端 |
|
|
babu61509 散播福音的祭司
註冊時間: 2007-08-26 文章: 142
681.01 果凍幣
|
發表於: 2009-4-27, AM 10:40 星期一 文章主題: |
|
|
稍微補充一下下 :
引言回覆: |
要取 a~b 的亂數可以這麼寫:
(rand()%(b-a+1))+a
|
稍微再改成 (rand()%(c))+a
因為rand()會隨機傳回一個數值,而%是求它的餘數,以上面公式為例,任何數去求c的餘數出來的值必定"小於"c,然後再加上a,出來值的範圍就是 a ~ b 了。
也就是說,rand()%(c)這段是求 0 ~ (c-1) 的亂數,後面的a就是把這段亂數位移。
ex :
1.
rand() = 951563 a = 10 b = 100 c = 100 - 10 + 1 = 91
(rand()%(b-a+1))+a = (951563%(91))+10 = 67 + 10 = 77
2.
rand() = 480246 a = 1 b = 50 c = 50 - 1 + 1 = 50
(rand()%(b-a+1))+a = (480246%(50))+1 = 46 + 1 = 47 _________________ 已經畢業了!! |
|
回頂端 |
|
|
|