random(0,1)
生成一个在a
和b
之间(包括a和b)的随机数。random(0,1)
会生成一个在0和1之间的均匀分布的随机数。请看下面我的答案:(a+(((1+random(0,1))*b))%(b-a))
我的面试官对我在这个表达式中使用 b
的方式不满意:
(((1+random(0,1))*b))
接着我尝试将我的答案改为:
int*z=(int*)malloc(sizeof(int));
(a+(((1+random(0,1))*(*z)))%(b-a));
后来问题变成了从random(1,5)
生成random(1,7)
。 我的回答是:
A = rand(1,5)%3
B = (rand(1,5)+1)%3
C = (rand(1,5)+2)%3
rand(1,7) = rand(1,5)+ (A+B+C)%3
我的回答正确吗?
rand(1,7) := rand(1,5)
可以正常工作。 - Mateen Ulhaqb
是可能的返回值?我猜random(0,1)
总是返回小于1的值?这会使得这个问题特别棘手。 - OpenSaucerandom(1,5)
来做到这一点,因为没有5的任何幂是7的倍数,所以你永远无法均匀地分配所有可能的随机调用结果给输出。然而,你可以安排预期所需的调用次数相当小(我认为少于3)。对于整数来说,这是一个经典的面试问题,对于浮点数来说,它实际上只是同样的问题。 - Steve Jessop