隨機取值
#include<stdlib.h>
#include<time.h>
srand((unsigned) time(NULL));
rand() from 0 ~ 32766
RAND_MAX=32767
#include<stdlib.h>
#include<time.h>
srand((unsigned) time(NULL));
rand() from 0 ~ 32766
RAND_MAX=32767
rand() 將會傳回一個介於 0 到 RAND_MAX 之間的一個整數值,(最小是 0,最大則為 RAND_MAX)。RAND_MAX 是 stdlib.h 定義的一個常數,其值在不同的系統有不同的大小,以 DOS 系統為例,其值為 32767 (215-1)。
測試RAND_MAX數值:printf("%d\n",RAND_MAX);
0 <= (double)rand() / RAND_MAX < 1
避免每次都取同樣的亂數值:
1.引入 stdlib.h、time.h
2.srand((unsigned) time(NULL));
3.加入PID會更好:srand((unsigned) time(NULL) + getpid());
取 0-9 :int a=rand() % 10;
取1-100:int a=(rand() % 100) +1;
取100-1000: int a=(rand() % 901) +100;
取整數區間值公式:
含上、下界[min,max]:rand_num = (max-min+1) * (double)rand() / RAND_MAX + min;
不含上界[min,max):rand_num = (max-min) * (double)rand() / RAND_MAX + min;
不含下界(min,max]:rand_num = (max-min) * (double)rand() / RAND_MAX + min + 1;
不含上、下界(min,max):rand_num = (max-min-1) * (double)rand() / RAND_MAX + min+1;
取 [0-9] :int a = 9*rand()/RAND_MAX + 0
取[1-100]:int a = 99*rand()/RAND_MAX + 1;
取[100-1000]: int a = 900*rand()/RAND_MAX + 100;
實際測試:
printf("RAND_MAX=%d\n",RAND_MAX);
int n=100,rand_num;
int min=1;int max=10;
while(n-- > 0){
rand_num=(max-min+1)*(double)rand() / RAND_MAX + min; //[min,max]
printf("%2d [%d,%2d]=%3d ",n,min,max,rand_num); //1,10均含
rand_num=(max-min) * (double)rand() / RAND_MAX + min; //[min,max)
printf("[%d,%2d)=%3d ",min,max,rand_num); //含1,不含10
rand_num=(max-min) * (double)rand() / RAND_MAX +min+1; //(min,max]
printf("(%d,%2d]=%3d ",min,max,rand_num); //不含1,含10
rand_num=(max-min-1) * (double)rand() / RAND_MAX+min+1; //(min,max)
printf("(%d,%2d)=%3d\n",min,max,rand_num); //1,10均不含
}