计算一个班30人学生生日同一天概率的程序出有关问题了
计算一个班30人学生生日同一天概率的程序出问题了
我的问题是为什么程序运行结果不是0就是10000?
详情见代码注释
------解决方案--------------------
我的问题是为什么程序运行结果不是0就是10000?
详情见代码注释
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
int arr[30],i,j,k,res,num=0,flag=0;
//k代表统计次数10000次
for(k=0;k<10000;k++)
{
flag=0;
srand((unsigned int)time(NULL));
for(i=0;i<30;i++)
{
if((res=rand()%365)>32485) //剔除随机函数生成的32485后面的数据
i--;
else
arr[i]=res%365; //将生日存到arr数组
}
for(i=0;i<29;i++) //将30个学生的每一个与其他学生生日作对比
{
for(j=i+1;j<30;j++)
if(arr[i]==arr[j])
{
flag=1;
break; //遇到相同的就退出循环
}
if(flag==1)
{
num+=1; //将计数器加1
break; //退出二重循环,重新开始新测试
}
}
}
printf("%d\n",num); //打印出10000次中有2位同学生日在同一天的次数,为何不是0就是10000?
return 0;
}
------解决方案--------------------
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
int arr[30],i,j,k,res,num=0,flag=0;
srand((unsigned int)time(NULL)); //随机数种子初始化放这里
//k代表统计次数10000次
for (k=0;k<10000;k++)
{
flag=0;
for (i=0;i<30;i++)
{
if ((res=rand()%365)>32485)
i--;
else
arr[i]=res%365;
}
for (i=0;i<29;i++)
{
for (j=i+1;j<30;j++)
if (arr[i]==arr[j])
{
flag=1;
break;
}
if (flag==1)
{
num+=1;
break;
}
}
}
printf("%d\n",num);
return 0;
}