想了很久,还是加了一个goto语句,数字好象不重复了,请老师们纠正!
#include "stdio.h"
#include "time.h"
#include "stdlib.h"
#include "string.h"
#define N 20 //设置奖品个数;
#define M 500 //参加抽奖人数;
int main()
{
int i,s,k=0,a[N];
printf("本次设置奖品数%d个;\n",N);
printf("本次参加抽奖人数%d人;\n",M);
getchar();
srand(time(NULL));
for(k=0;k<N;k++)
ch:
{i=rand()%M;
{for(s=0;s<k;s++)
if(i==a[s]) goto ch;
a[k]=i;}
printf("%d\t",a[k]);}
}
#include "stdio.h"
#include "time.h"
#include "stdlib.h"
#include "string.h"
#define N 20 //设置奖品个数;
#define M 500 //参加抽奖人数;
int MyRand(int *PrizeNumber,int PrizeCount);
int main()
{
int PrizeNumber[N];
int PrizeCount=-1,k;
int AllNumber[M];
int tmp1,tmp2,tmpPrize;
printf("本次设置奖品数%d个;\n",N);
printf("本次参加抽奖人数%d人;\n",M);
getchar();
printf("方法一!\n");
srand(time(NULL));
for(k=0;k<N;k++)
{
if( (PrizeCount=MyRand(PrizeNumber,PrizeCount))==-1)
{
printf("错误!\n");
getch();
return 1;
}
}
for(k=0;k<N;k++)
{
printf("%d\t",PrizeNumber[k]);
}
getch();
printf("方法二!\n");
for(k=0;k<M;k++)
{
AllNumber[k]=k+1;
}
for(k=0;k<M*2;k++)
{
tmp1=rand()%M;
tmp2=rand()%M;
tmpPrize=AllNumber[tmp1];
AllNumber[tmp1]=AllNumber[tmp2];
AllNumber[tmp2]=tmpPrize;
}
for(k=0;k<N;k++)
{
printf("%d\t",AllNumber[k]);
}
getch();
return 0;
}
int MyRand(int *PrizeNumber,int PrizeCount)
{
int Prize=rand()%M;
int i;
int flag = 0;
if(PrizeCount>N)return -1;
for(i=0;i<PrizeCount;i++)
{
if(Prize == PrizeNumber[i])
{
flag=1;
break;
}
}
if(flag)
{
MyRand(PrizeNumber,PrizeCount);
}
else
{
PrizeNumber[++PrizeCount]=Prize;
return PrizeCount;
}
}
[/CODE]老师我看完了,收益颇丰,知道函数的好处了。但不会改您的程序。有几个小问题,我不知道怎么修改?
方法一:有重复的。我的测试方法,N=M=5,数据应该不重复为0,1,2,3,4。只是次序的变化。
方法二:没有重复。但没有包括0。
再次的表示衷心的感谢。