Tac 发表于 2020-12-19 11:11:28

利用蒙特卡洛模拟估算pi

原理解释:如下图所示
https://iknow-pic.cdn.bcebos.com/9e3df8dcd100baa14b7b5cc45710b912c8fc2e7d
在正方形中随机生成点(个数为N),单位圆中橙色点个数为M,通过计算M/N即可近似得出pi的值
给定一个非负整数,表示一行中来自标准输入(stdin)的试验次数,将利用蒙特卡洛模拟估算的近似值输出到标准输出(stdout)。
当输入为0时,结束程序。
下面为输入输出示例
https://iknow-pic.cdn.bcebos.com/3ac79f3df8dcd1003fcbe35e628b4710b9122f7d

一世轻尘 发表于 2020-12-19 11:15:42

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>//调用头文件
//利用蒙特卡罗算法计算pi的值
int main()//主函数
{
        float x,y,pi;//定义单精度浮点型变量x,y,pi
        long long C=0,D=0;
        srand((unsigned)time(NULL));
        for(long long i=0;i<100000000;i++)
        {
                C++;//总次数
                x=(float)rand()/RAND_MAX;//随机横坐标
                y=(float)rand()/RAND_MAX;//随机纵坐标
                if(sqrt(x*x+y*y)<=1)//落入单位圆的条件
                D++;//满足条件的次数
        }
        pi=4.0f*(float)D/C;//利用单位圆的面积求pi的值
        printf("pi=%f\n",pi);//输出pi的值
        return 0;
}
之前学校作业{:10_279:}

Tac 发表于 2020-12-19 11:45:49

一世轻尘 发表于 2020-12-19 11:15
之前学校作业

。。。为什么全是报错{:10_245:}

Tac 发表于 2020-12-19 11:47:30

一世轻尘 发表于 2020-12-19 11:15
之前学校作业

我问的是python啊 不是c++{:10_266:}

Tac 发表于 2020-12-19 18:24:59

help

chipeyown 发表于 2020-12-19 21:01:36

import random
while True:
    n=eval(input('请输入数字:'))
    if n==0:
      print('程序结束!')
      break
    M=N=0#M为分子,N为分母
    for i in range(n):
      a=random.random()
      b=random.random()
      s=a**2+b**2
      if s<=1:
            M+=1
      N+=1
    pi=M/N*4
    print('估计的pi值为: {}'.format(pi))

Tac 发表于 2020-12-19 22:54:59

chipeyown 发表于 2020-12-19 21:01


可以修改一下允许输入输出跟第二个图一样吗?另外输入为100000000时计算时间过长,有办法解决吗?
页: [1]
查看完整版本: 利用蒙特卡洛模拟估算pi