下面是我编的一个生成0到18的非重复随机数列,居然要运行30多秒,高手帮忙分析一下原因
#include<stdlib.h>
#define Num 19
int f(int i,int k,int *a)
{int j,p;
j=0;
p=0;
while(j<=i)
{ if(a[j]==k)
{p=1;
break;
}
j++;
}
return(p);
}
main()
{ int i,k,a[Num];
printf("\n");
for(i=0;i<Num;i++) a[i]=-1;
randomize();
a[0]=random(Num);
for(i=0;i<Num-1;i++)
{ randomize();
k=random(Num);
while(f(i,k,&a)&&a[i]!=-1)
{ randomize();
k=random(Num);
}
a[i+1]=k;
}
for(i=0;i<Num;i++) printf(" %d",a[i]);
getch();
}
参考答案:循环太多了.再优化下代码吧.