各位大侠,走过路过不要错过!只要评论就给分
我写了一个模拟卡片收集的程序:大概意思是,你至少需要多少次才能集齐所有的卡片!就跟小时候吃得方便面里的收集卡片一样!不过我感觉我的思路有点问题!想请大家给点指导!主要是模拟方法不对!
#include <stdlib.h>
#include <stdio.h>
#define N 65535
int main()
{
int i,j,k,m,choicenum=0;
int cardnum;
static int alltimes=0;
printf("Please input the card number , you want to collect:");
scanf("%d",&cardnum);
int *card=(int *)malloc(cardnum*sizeof(int));
for(i=0;i<cardnum;i++) card[i]=i+1;
for(i=0;i<N;i++)
{
int randchoice=rand()%cardnum+1;
for(j=0;j<cardnum;j++)
{
if(randchoice==card[j])
card[j]=0;
}
choicenum++;
m=0;
for(k=0;k<cardnum;k++)
{
if(card[k]==0)
{
m++;
}
if(m==cardnum)
{
printf("You must have collected at least %d cards\n",choicenum);
exit(0);
}
}
}
printf("You failed!\n");
return 0;
}
程序很简单,我想听听大家的意见,比如我输入100张卡片,那么该程序执行483次就停了,达不到模拟的效果啊!高手们给点指点;
[解决办法]
先在头上加
#include <time.h>
然后在程序中(在rand()的循环前加)
srand(time(NULL));
这样,随机数就不同了