为什么一起运行数据不对,但debug的时候一步步的运行数据却是对的?

来源:百度知道 编辑:UC知道 时间:2024/05/15 11:49:05
就是算一个班中M个人有多少个学生生日相同,循环N次。
代码如下:
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#define N 10
#define M 50
void main()
{
long day[M],same[4]={0,0,0,0},prob[5];
int count,i,j,k,l;
for(i=0;i<N;i++)
{
srand((unsigned)time(NULL));
for(j=0;j<M;j++)
day[j]=rand()%365+1;
for(j=0;j<M-1;j++)
{
count=0;
l=0;
for(k=j+1;k<M;k++)
if(day[j]==day[k])
{
count++;
day[k]=-1;
}
if(count>l&&count<5)
{
same[count-1]++;
l++;
}
}
}
printf("两人相同%d,三人相同%d,四人相同%d,五人相同%d",same[0],same[1],same[2],same[3]);
}

debug的时候数都是对的,但是一起算的时候数都是一些整数……
这是为什么……

srand((unsigned)time(NULL));
只需全局调用一次的

问题出在srand((unsigned)time(NULL));
单步debug的时候,时间间隔大,随机数差别大。
连续运行时,极短的时间内,随机种子相同,随机数相同。

建议这样修改:
for循环体前加一句srand((unsigned)time(NULL)); 并紧跟一个rand()。
循环体内的那句改为srand(rand());
这样以随机数作为种子继续计算随机数,才真正的“随机”了。