您的位置:首页 > 其它

[算法][随机数]一种生成2个不相同的随机数的方法

2015-09-11 15:24 435 查看
[引子]

下面以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既可以为整数,也可以为浮点数。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: