利用蒙特卡洛模拟估算pi
原理解释:如下图所示https://iknow-pic.cdn.bcebos.com/9e3df8dcd100baa14b7b5cc45710b912c8fc2e7d
在正方形中随机生成点(个数为N),单位圆中橙色点个数为M,通过计算M/N即可近似得出pi的值
给定一个非负整数,表示一行中来自标准输入(stdin)的试验次数,将利用蒙特卡洛模拟估算的近似值输出到标准输出(stdout)。
当输入为0时,结束程序。
下面为输入输出示例
https://iknow-pic.cdn.bcebos.com/3ac79f3df8dcd1003fcbe35e628b4710b9122f7d
#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:} 一世轻尘 发表于 2020-12-19 11:15
之前学校作业
。。。为什么全是报错{:10_245:} 一世轻尘 发表于 2020-12-19 11:15
之前学校作业
我问的是python啊 不是c++{:10_266:} help 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)) chipeyown 发表于 2020-12-19 21:01
可以修改一下允许输入输出跟第二个图一样吗?另外输入为100000000时计算时间过长,有办法解决吗?
页:
[1]