原理
#include<iostream>
#include<cstdio>
#include<cstdlib>/* srand, rand */
using namespace std;
int main(){
cout<<rand()<<endl;//在[0,RAND_MAX]生成一个随机数
return 0;
}
//重复运行程序,随机数不变。
//这是因为在电脑上的随机函数生成都是伪随机数
//rand()函数按照约定从一个seed(种子)开始向后生成随机数
//所以如果seed不变,那么生成的随机数也不变
改进
#include<iostream>
#include<cstdio>
#include<cstdlib>/* srand, rand */
#include <time.h> /* time */
using namespace std;
int main(){
srand((int)time(0));//重载随机数种子,参数是cpu当前时间
cout<<rand()<<endl;
return 0;
}
//由于时间总是在变化,所以程序每次的随机数种子都不一样,这样生成的随机数也就不同。
完善
void Randomize(){//重置随机说种子
srand((int)time(NULL));
}
int GenerateRandNum(int low,int high){//在[low,high]之间生成一个随机整数
if(low>high){
cout<<"make sure low<=high"<<endl;
exit(1);
}
//得到一个[0,RAND_MAX]的一个比例
double x=(double)rand() /((double)RAND_MAX+1.0);
//再将这个比例映射到我们所需要的区间上,即[low,high]
return (low+(int)(x*(high-low+1)));
}
double GenerateRandRel(double low,double high){//在[low,high]之间生成一个随机实数
if(low>high)
{
cout<<"make sure low<=high"<<endl;
exit(1);
}
double x=(double) rand() /(double)RAND_MAX;
return low+(double)x*(high-low);
}
int main() //test.main()
{
Randomize();
cout<<GenerateRandNum(0, 52)<<endl;
cout<<GenerateRandRel(0,1.0)<<endl;
return 0;
}
这是一个cpluscplus上的例子
/* rand example: guess the number */
#include <stdio.h> /* printf, scanf, puts, NULL */
#include <stdlib.h> /* srand, rand */
#include <time.h> /* time */
int main ()
{
int iSecret, iGuess;
/* initialize random seed: */
srand (time(NULL));
/* generate secret number between 1 and 10: */
iSecret = rand() % 10 + 1;
do {
printf ("Guess the number (1 to 10): ");
scanf ("%d",&iGuess);
if (iSecret<iGuess) puts ("The secret number is lower");
else if (iSecret>iGuess) puts ("The secret number is higher");
} while (iSecret!=iGuess);
puts ("Congratulations!");
return 0;
}