概率题
来源:互联网 发布:java入门基础教程pdf 编辑:程序博客网 时间:2024/05/23 19:15
题:
Please write out the program output.(写出下面程序的运行结果。)【德国某著名软件咨询企业2005年10月面试题】
// P92_example1.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include <stdlib.h>#define LOOP 1000int _tmain(int argc, _TCHAR* argv[]){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);return 0;}
解析:
这是我们见过的概率面试题中出得非常好的一道。
从表面上看,你完全无法看出它是一个概率问题。这里暗含的思想是一个1/4圆和一个正方形比较大小的问题,如图所示。
RAND_MAX是随机数中的最大值,也就是相当于最大半径R。x和y是横、纵坐标的两点,它们的平方和开根号就是原点到该点(x,y)的距离,当然这个距离有可能大于R,如b点,还有可能小于R,如a点。整个题目就蜕化成这样一个问题:随机在正方形里落1000个点,落在半径里面的点有多少个。如果落在里面一个点,则累计一次。
那这个问题就很好解决了,求落点可能性之比,就是求一个1/4圆面积和一个正方形面积之比。
1/4圆面积 = (1/4)x π x r x r
正方形的面积 = r x r
两者之比 = π/4
落点数 = π/4 x 1000 = 250 x π ≈ 785
答案:
出题者的意思显然就是要求你得出一个大概值,也就是250*π就可以了。实际上呢,你只要回答700~800之间都是正确的。
我们算的是落点值,落点越多,越接近250*π,落10个点、100个点都是很不准确的,所以该题落了1000个点。读者可以上机验证该程序,将LOOP改成10000、100000来实验,会发现结果越来越接近250*π。
- 概率题
- 概率题
- 概率题
- 概率题
- 概率题
- 概率题
- 概率题
- 概率题
- 概率题
- 概率题
- 一道概率题
- 一道概率题
- 一道概率题
- 再来一道概率题
- 程序设计 概率题
- 蓝桥杯(概率题)
- 蓝桥杯(概率题)
- 抛银币 概率题
- [Leetcode]Convert Sorted Array to Binary Search Tree
- linux shell 中"2>&1"含义
- 【记忆深处,意志却提醒了我】
- ARM平台QT移植解决字体方案的终结篇
- Java日期格式化及其使用例子收集
- 概率题
- Cocos2d-X游戏开发之自带字体N种
- Android重启应用程序代码
- 删除特定字符
- OpenSessionInViewFilter作用及配置
- linux下的C语言编程(总结篇)
- Ubuntu DNS配置与使用命令设置Ubuntu的ip地址
- SQLite指南(5) - PRAGMA命令用法(完整)
- vmware中的bridge、nat、host_only的区别