计算一个班30人学生生日同一天概率的程序出有关问题了

计算一个班30人学生生日同一天概率的程序出问题了
我的问题是为什么程序运行结果不是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;
}