使用给定函数找到新函数,该函数生成给定函数输出的两倍
find new function using given function that generates twice the output of given function
给定一个函数,它以相等的概率生成从 1 到 6 的数字。通过对给定函数进行操作来找到一个函数,使其以相等的概率产生从 1 到 12 的数字。
我的做法:
我正在维护一个计数变量。如果 count 是偶数,那么我在 f()
上加 0,否则我在 f()
上加 6。但是 f()
的调用次数是无限的,所以我们不能使用计数变量。
f以等概率抽取1到6的整数。现在你想把它扩展到 1 到 12 之间的整数。
所以引入g,从0到1等概率抽取一个整数
(g \times 6) + f
should show the desired behaviour.
设f6()
为以等概率生成从1到6的值的函数。
我们可以调用 f6()
两次并将结果存储在两个单独的变量 a
和 b
中。
现在使用表达式(a + (b&1)*6)
,我们可以等概率生成从1到12的数字。
解释:
a
和 b
的范围从 1 到 6。因为 f6()
生成的数字概率相等。
(b&1)
将 return 0
或 1
的可能性相同,具体取决于 b 是偶数还是奇数。
现在,如果 b&1
是 0
,自 (b&1)*6 = 0
以来,我们的范围从 1 到 6。因此,结果只能是值 1、2、3、4、5、6。
如果 b&1
是 1
,结果只能是值 7、8、9、10、11、12,如 (b&1)*6 = 6
。
给定一个函数,它以相等的概率生成从 1 到 6 的数字。通过对给定函数进行操作来找到一个函数,使其以相等的概率产生从 1 到 12 的数字。
我的做法:
我正在维护一个计数变量。如果 count 是偶数,那么我在 f()
上加 0,否则我在 f()
上加 6。但是 f()
的调用次数是无限的,所以我们不能使用计数变量。
f以等概率抽取1到6的整数。现在你想把它扩展到 1 到 12 之间的整数。 所以引入g,从0到1等概率抽取一个整数
(g \times 6) + f
should show the desired behaviour.
设f6()
为以等概率生成从1到6的值的函数。
我们可以调用 f6()
两次并将结果存储在两个单独的变量 a
和 b
中。
现在使用表达式(a + (b&1)*6)
,我们可以等概率生成从1到12的数字。
解释:
a
和 b
的范围从 1 到 6。因为 f6()
生成的数字概率相等。
(b&1)
将 return 0
或 1
的可能性相同,具体取决于 b 是偶数还是奇数。
现在,如果 b&1
是 0
,自 (b&1)*6 = 0
以来,我们的范围从 1 到 6。因此,结果只能是值 1、2、3、4、5、6。
如果 b&1
是 1
,结果只能是值 7、8、9、10、11、12,如 (b&1)*6 = 6
。