概率

写出下面程序的运行结果。[德国某著名
软件咨询企业2005年10月面试题]

解析:这是我所见到的概率面试例题中出得非常好的一道。
从表面上看,你完全无法看出它是一个概率问题。这里暗含的思想是一个1/4圆和一个
正方形比较大小的问题,如下图所示。

RAND_MAX是随机数中的最大值,也就是相当于最大半径R。x和y是横、纵坐标上的两
点,它们的平方和开根号就是原点到该点(x,y)的距离,当然这个距离有可能大于R,如b
点,还有可能小于R,如a点。整个题目就蜕化成这样一个问题:随机在正方形里落1000个
点,落在半径里面的点有多少个。如果落在里面一个点,则累积一次。
那这个问题就很好解决了,求落点可能性之比,就是求一个1/4圆面积和一个正方形面
积之比。
1/4圆面积=(1/4)×π×r×r;正方形面积=r×r
两者之比=π/4;落点数=π/4×1000=250×π≈785
答案:出题者的意思显然就是要求你得出一个大概值,也就是250×π就可以了。实际上
呢,你只要回答700~800之间都是正确的。
我们算的是落点值,落点越多,越接近250×π,落10个点、100点都是很不准确的,所以
该题落了1000个点。读者可以上机验证该程序,将Loop改成10000、100000来试验,会发现
结果越来越接近250×π。

posted @ 2017-02-05 19:15  我有一壶酒  阅读(259)  评论(0编辑  收藏  举报