首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

对于rand_m 生成1到n的有关问题

2012-10-06 
对于rand_m 生成1到n的问题今天在网上看到了在网上传的面试题,题目是:int random_n(){int val 0 int t

对于rand_m 生成1到n的问题

今天在网上看到了在网上传的面试题,题目是:

int random_n(){int val = 0 ;int t; // t为n最大倍数,且满足 t <= m * mdo { val = m * (random_m() - 1) + random_m();} while (val > t);return val;}

?可以略微对val处理一下。

?

2012-03-01

?方法2:

例如Rand7会生成1,2,3,4,5,6,7这些数。我们以4为分界点。

如果生成1-3这3个数字时,我们在Rand7,只取1-5这几个数字。

如果生成5-7这3个数字时,我们在Rand7+3,只取5-10这几个数字。

?

?

方法3:

例如Rand7会生成1,2,3,4,5,6,7这些数。我们以4为分界点。

由于 rand7 是 1..7

rand7+3是 4..10, 直接返回结果时,4..7 的概率会多一倍

全局标志位 flag = 0; 记录每当出现再次4..7时才进行输出

1.如果生成1-3这3个数字时,我们在Rand7

?1.1如果生成1-3,直接输出

?1.2如果生成4-7,如果flag=0,?则置flag = 1,?再调用一次Rand10.

????????????????????????? flag = 1, 直接返回此值, flag = 0

?

2.如果生成5-7这3个数字时,我们在Rand7+3,只取5-10这几个数字。

?同理

?

热点排行