福州:小姐,知道我在哪儿吗?在你公司厕所里。 素半个标题党,附一概率面试题 ...

#include <iostream>
#include<stdlib.h>

using namespace std;

#define LOOP 10000
int main()
{

int rgnC=0;
for(int i=0; i<LOOP; i++)
{
int x=rand();
int y=rand();
if(x*x+y*y<RAND_MAX*RAND_MAX)
rgnC++;
}
printf("%d\n", rgnC);
system("pause");
return 0;
}



以下是我解答思路和该书作者对题的解答,我设置成白色了,大家可以选中察看
首先防止平方造成差异,对式子变形
x*x+y*y+2xy <RAND_MAX*RAND_MAX+2xy
x+y <RAND_MAX*RAND

将范围大概分为1-10段,1-2.5 2.5-5 5.5-7 7.5-10,当然越细越准
要求即x+y都在段5以下即可,那问题就简单了,判断下在各个区域出现的概率,比如x,y都出现在1-2.5区域的概率,以此类推,这里就不细说了。
最后得到结果大概为780左右。

该书作者是这样解的,其实RAND_MAX*RAND_MAX是4分之1圆,x*x+y*y其实是表示一个正方形的面积,求的就是圆和正方形面积之比。图画不出来,网上应该可以找得到
圆面积为 (1/4)PAI*R*R
正方形 R*R
比为1/4*pai
即LOOP*1/4*pai=250pai.
结果也是785左右。

有个不解,为什么RAND_MAX*RAND_MAX是表示4分之1圆
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值