校招刷题群
高效刷题 迎战校招
校招精选试题
近年面笔经面经群内分享
Java刷题群 前端刷题群 产品运营群
首页 > 算法 > 智力分析题
题目

有一个可以等概率生成随机数1-3的函数,random3,要求写出一个可以生成random7的函数,可以等概率的生成数字1-7

解答

解法:通过random3生成random9 step2: random9中剔除大于7,即可生成random7。

其中,第一步可能相对有点绕,如何通过random3生成random9,可以分两步:

第一步:执行一次random3,得到的结果称为a
第二步:再执行一次random3,得到的结果称为b
第三步:将第一步得到的a想像成1-9中的[1-3], [4-6], [7-9]区间,如果a为1,那么表示结果落在第一个区间,具体是1-3中的哪个数字,由数字b决定,用公示表示,即结果c = (a - 1) * 3 + b

而从random9生成random7,只需要不断循环,如果结果小于等于7,那么输出,否则再次循环,直到结果落在1-7之间输出即可。由于题目并没有要求每次生成的时间相同,而只是概率相同,这样的方法是满足题目要求的。

举一反三,random x生成random y的套路如下:

如果x > y,那么直接多次执行random x,剔除大于y的结果即可。 如果x < y,那么借助区间,生成 random x^2,判断x ^2是否 < y,如果还小,那么继续生成 random x^4,直到区间大于y即可。

js伪代码如下:

random3;

function random9() {
const a = random3();
const b = random3();
const c = (a - 1) * 3 + b;
return c;
}

function random7() {
let res = random9();
while (res > 7) {
res = random9();
}
return res;
}
C 2条回复 评论
六元的大可爱er

真棒!茅塞顿开的感觉。

发表于 2024-09-19 23:00:00
0 0
行者z

太强了,学完框架再回来看

发表于 2024-08-13 23:00:00
0 0