Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 使用均匀分布的rand100()编写函数rand30(),返回1到100_Algorithm - Fatal编程技术网

Algorithm 使用均匀分布的rand100()编写函数rand30(),返回1到100

Algorithm 使用均匀分布的rand100()编写函数rand30(),返回1到100,algorithm,Algorithm,请尝试编写函数rand30(),该函数应返回1到30 您有rand100()函数。假设函数返回整数: int r = rand100(); while (r > 90) { r = rand100(); } return 1 + (r - 1) % 30; 其中,%运算符表示模 当我们均匀分布了100个输入数时,要得到30个输出数的均匀分布,我们能做的最好的事情就是将3个输入数映射到一个输出数。其余10个输入必须丢弃 我们平均多久给rand100打一次电话? 90%中有1次 9%

请尝试编写函数
rand30()
,该函数应返回1到30


您有
rand100()
函数。

假设函数返回整数:

int r = rand100();
while (r > 90) {
    r = rand100();
}
return 1 + (r - 1) % 30;
其中,
%
运算符表示模

当我们均匀分布了100个输入数时,要得到30个输出数的均匀分布,我们能做的最好的事情就是将3个输入数映射到一个输出数。其余10个输入必须丢弃

我们平均多久给rand100打一次电话? 90%中有1次 9%中有2次 3倍于0.9%


平均值是1.111111

结果应该是[1,30]中的整数?让我猜猜。。。家庭作业?如果你想寻求家庭作业方面的帮助,你需要向我们展示你的尝试,并告诉我们你的困境。可能是无休止的循环。。。9/10分:-)@jimpic:这个问题允许我们假设
rand100
函数是均匀分布的,所以这个循环是无限的,概率为0。我认为这不是一个好的解决方案。在相同的分发类型之间进行循环转换,只是为了扩展,这是一种糟糕的做法。还有,你能证明它是均匀分布的吗?@dreamzoe:这是获得均匀分布的唯一方法。这很耗时,概率很小,但这是为统一性付出的代价。以更多代码为代价,它可以在返回之前对
rand100
的预期调用次数方面稍微提高效率。但效率不高。通过不丢弃代码,而是在下一次迭代中使用剩余值,可以构建稍微更高效的代码。但这一功能在实践中已经非常有效。