[引子]
下面以C语言为例进行描述。
设min和max为所要生成的数的取值范围,
设函数rand(min,max)能返回取值范围为[min,max)的随机数,
两个随机数分别为num1和num2,则标题所描述的功能可以这样实现:
void f(int min,int max){ int num1=rand(min,max); int num2; do{ num2=rand(min,max) }while(num2!=num1) printf("the 1st number is %d\n",num1); printf("the 2nd number is %d",num2); }
[分析和改进]
上述算法在某些情况下,例如当rand()返回整数,且max=min+1,
或者在最最极端的情况下,会发生死循环。可以用下面的算法代替:
代码为:
void f(int min,int max){ int len=max-min; int num1=rand(0,len); int dist=rand(1,len); int num2=(num1+dist)%len; num1+=min; num2+=min; printf("the 1st number is %d\n",num1); printf("the 2nd number is %d",num2); }
在这个算法中,num1/num2既可以为整数,也可以为浮点数。