[算法][随机数]一种生成2个不相同的随机数的方法
2015-09-11 15:24
435 查看
[引子]
下面以C语言为例进行描述。
设min和max为所要生成的数的取值范围,
设函数rand(min,max)能返回取值范围为[min,max)的随机数,
两个随机数分别为num1和num2,则标题所描述的功能可以这样实现:
[分析和改进]
上述算法在某些情况下,例如当rand()返回整数,且max=min+1,
或者在最最极端的情况下,会发生死循环。可以用下面的算法代替:
代码为:
下面以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既可以为整数,也可以为浮点数。
相关文章推荐
- python 各种测试框架
- 一种方便理解的mysql 去重方法
- MySQL日志功能详解查询、慢查询
- Unicode(UTF-8, UTF-16)令人混淆的概念
- HDU 5429 【大数除法模拟】
- Swift navigationItem 属性常用设置
- 广播接收者和自定义广播
- java操作excel表格(2003)
- jquery 绑定事件 获取方式 --------------data event 获取
- 虚拟机centos6.5 --VirtualBox设置全屏
- OC_协议代理
- StringUtils中 isNotEmpty 和isNotBlank的区别
- 构造器
- HTTPClient4.3的典型小例子
- UIScrollView及UIPageControl的使用
- 出错file is universal (3 slices) but does not contain a(n) armv7s slice
- jQuery瀑布流效果
- 当出现『SIOCADDRT: Network is unreachable』 这个错误时,肯定是由于 gw 后面接的 IP 无法直接与您的网域沟通 (Gateway 并不在你的网域内), 所以,赶紧检
- ajax详细解读
- (一)简单的登陆注册系统