随机数的使用--PI值的求解_huifeng00的空间_百度空间

首先看如下图


假设如上,圆的半径为r,在正方形内随机投n个顶点。落在圆内的顶点为k个。由于是随机投点,所以随着n

增大,可以近似认为k/n = PI*R*R/(2R*2R);

也就是k/n=PI/4; 得到k*4/n = PI.

根据上述思想写程序如下:

/************************************************************************/
/* coder: huifeng00 at 2010-7-2 20:00                                   */
/************************************************************************/
#include <iostream>
#include <math.h>
#include <time.h>
using namespace std;

double calPI(int n)//这里的n表示要生成的点数
{
int x,y;
int k=0;
for (int i=0;i<n;i++)
{
   x = rand()%1001;
   y = rand()%1001;
   if (x*x+y*y<=1000000)
   {
    k++;
   }
}
    return k*4.0/n;
}
int main()
{
   int n;
   srand(time(NULL));
   while(1)
   {
    cin>>n;//输入要投的点数
    if(n<=0)break;
    cout<<n<<": "<<"PI="<<calPI(n)<<endl;
   }
   return 0;
}

有感:程序不难,只是记录随机的思想很不错,看随机快速排序的时候的感觉。

注:随机快速排序和普通快速排序的不同是它每次基点的选择是随机的。



郑重声明:资讯 【随机数的使用--PI值的求解_huifeng00的空间_百度空间】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——