在产生随机数时,我选用了time(0),可是却总是能生成一样的随机数。我开始把其归结为计算机运行过快,需一定间隔,所以这个随机数不能用。在请教了大佬之后,原因是不能把srand()和rand都放在循环里。需要srand在循环外,rand在循环内配合使用,这样便可生成真正随机数。
#include<iostream>
#include<stdlib.h>
#include<time.h>
using namespace std;
const float Day = 365.0;
int getrand();
int main()
{
int birth[50] = { 0 },i,j,l,k,flag,count=0;
float p;
srand((unsigned)time(0));
for (j = 0; j < 10000; j++)
{
flag = 0;
for (i = 0; i <50; i++)
{
birth[i] = rand()%365+1;
}
for (k = 0; flag == 0 && k <49; k++)
{
for (l = k + 1; l < 50; l++)
{
if (birth[k] == birth[l])
{
flag = 1;
break;
}
}
}
if (flag == 1)
count++;
}
cout << count<<endl;
p = (float)count / j;
p = 1 - p;
cout << p;
return 0;
}
``