使用蒙特卡洛仿真方法求圆周率。

输入格式:
从键盘输入四个实型数和一个整型数,分别为矩形左上角的横坐标、纵坐标、矩形长度、矩形宽度和投点次数,数与数之间可以用一个或多个空格或回车分隔。

输出格式:
如果矩形长度与宽度不相等(非正方形)或长宽数据非法,则输出“Wrong Format”。
如果估算出的π与Math.PI差值小于1E-4,则输出“Success”,否则输出“failed”。
输入样例:
在这里给出一组输入。例如:

0 0 1 1 20000000
输出样例:
在这里给出相应的输出。例如:

Success
这里就自主参透,注释有些复杂

import java.util.Random;
import java.util.Scanner;
public class Main {public static void main(String[] args) {double abscissa,ordinate;double length,width;int count = 0;Scanner input = new Scanner(System.in);abscissa = input.nextDouble();ordinate = input.nextDouble();length = input.nextDouble();width = input.nextDouble();count = input.nextInt();Rectangle rectangle = new Rectangle(new Coordinate(abscissa,ordinate),length,width);MonteCarloSimulation monteCarlo = new MonteCarloSimulation(rectangle);if(monteCarlo.validateRectangle()){monteCarlo.setCircle();if((Math.abs(monteCarlo.simulation(count) - Math.PI)) <= 1e-3){System.out.println("Success");}else{System.out.println("failed");}}else{System.out.println("Wrong Format");}}
}class MonteCarloSimulation{private Rectangle rectangle;private Circle c;public MonteCarloSimulation(Rectangle rectangle) {this.rectangle = rectangle;}public void setCircle(){this.c=new Circle(rectangle);}public boolean validateRectangle(){//验证矩形boolean ret=false;if (rectangle.getLength()== rectangle.getWidth()) ret=true;return ret;}public double simulation(int count){//模拟int num=0;int numx=0;Random rand=new Random();for (int i = 0; i < count; i++) {//根据样例来,样例的随机数范围是[0,1),不包括1的那个边界。double x= rand.nextDouble()*(rectangle.getWidth())+rectangle.getCoordinate().getAbscissa();double y= rand.nextDouble()*(rectangle.getLength())+rectangle.getCoordinate().getOrdinate()-rectangle.getLength();//测试数据if (x>=rectangle.getCoordinate().getAbscissa()&&x<=rectangle.getCoordinate().getAbscissa()+ rectangle.getWidth()){numx++;}//测试数据结束if (Math.pow(x-c.getCenterOfCircleX(),2)+Math.pow(y-c.getCenterOfCircleY(),2)<=Math.pow(c.getCenterOfCircleR(),2)){num++;}}//System.out.println(numx);//System.out.println(num*4.0/count);return num*4.0/count;}public static class Circle{private double centerOfCircleX;private double centerOfCircleY;private double centerOfCircleR;public Circle(Rectangle rectangle) {this.centerOfCircleX = rectangle.getCoordinate().getAbscissa()+rectangle.getWidth()/2.0;this.centerOfCircleY = rectangle.getCoordinate().getOrdinate()-rectangle.getLength()/2.0;this.centerOfCircleR=Math.abs(rectangle.getCoordinate().getAbscissa()-centerOfCircleX);}public double getCenterOfCircleX() {return centerOfCircleX;}public double getCenterOfCircleY() {return centerOfCircleY;}public double getCenterOfCircleR() {return centerOfCircleR;}}public Rectangle getRectangle() {return rectangle;}public void setRectangle(Rectangle rectangle) {this.rectangle = rectangle;}
}class Coordinate{private double abscissa;private double ordinate;public Coordinate(double abscissa, double ordinate) {this.abscissa = abscissa;this.ordinate = ordinate;}public double getAbscissa() {return abscissa;}public void setAbscissa(double abscissa) {this.abscissa = abscissa;}public double getOrdinate() {return ordinate;}public void setOrdinate(double ordinate) {this.ordinate = ordinate;}
}
class Rectangle{private Coordinate coordinate;private double length,width;public Rectangle(Coordinate coordinate, double length, double width) {this.coordinate = coordinate;this.length = length;this.width = width;}public Coordinate getCoordinate() {return coordinate;}public void setCoordinate(Coordinate coordinate) {this.coordinate = coordinate;}public double getLength() {return length;}public void setLength(double length) {this.length = length;}public double getWidth() {return width;}public void setWidth(double width) {this.width = width;}
}

7-35 蒙特卡罗方法求圆周率 (30 分)相关推荐

  1. 7-3 蒙特卡罗方法求圆周率 (15 分)(Java)

    7-3 蒙特卡罗方法求圆周率 (15 分)(Java) 可算写出来了 使用蒙特卡洛仿真方法求圆周率.(具体要求见作业指导书 2020-OO第05次作业-2指导书V1.0.pdf ) 输入格式: 从键盘 ...

  2. Python+numpy实现蒙特卡罗方法估计圆周率近似值

    问题描述:使用蒙特卡罗方法估计圆周率近似值,具体描述详见以前发的文章蒙特.卡罗方法求解圆周率近似值原理与Python实现 技术要点:Python扩展库numpy中的模块random可以批量生成特定范围 ...

  3. 蒙特卡洛方法求圆周率

    基于Julia语言的蒙特卡洛方法求圆周率 π \pi π 原理: ( x , y ) (x,y) (x,y)是平面上的一点,其中 x , y x, y x,y 服从均匀分布 U ( − 1 , 1 ) ...

  4. Python用蒙特卡罗方法计算圆周率近似值

    实验目的: 1.理解蒙特Ÿ卡罗方法原理. 2.理解for循环本质与工作原理. 3.了解random模块中常用函数. 实验内容: 蒙特Ÿ卡罗方法是一种通过概率来得到问题近似解的方法,在很多领域都有重要的 ...

  5. Matlab仿真-蒙特卡罗方法求半径为1圆的面积

    试用蒙特卡罗方法求出半径为1的圆的面积,并与理论值对比. (1)数学模型.         设有两个相互独立的随机变量x,y,服从[0 2]上的均匀分布.那么,由它们所确定的坐标点(x,y)均匀分布于 ...

  6. 用蒙特卡罗方法实现圆周率的计算

    用蒙特卡罗方法实现圆周率的计算 要求(以下分析结果要在实验报告上体现): 根据所得到PI值的精确度(前后两次PI值的差,小于0.0001)来确定是否终止实验. 对比不同精确度(0.01, 0.001, ...

  7. 【MPI OpenMP】并行蒙特卡洛方法求圆周率(C语言)

    本文记录了使用MPI与OpenMP两种并行计算方法实现蒙特卡洛计算圆周率,题目是专业实验课上老师给的,主要分享一下自己的做法,希望大家不吝赐教(使用的语言是C语言). 蒙特卡洛方法求圆周率 蒙特卡洛方 ...

  8. 【Python】蒙特卡罗方法计算圆周率及给定随机数种子

    蒙特卡罗方法 利用随机点分布,让随机点足够的多,用指定区域随机点数与总区域随机点数做比值来求取指定区域面积 求解圆周率,在一个正方形中撒点,根据在1/4圆内点的数量占总撒点数的比例计算圆周率值. 代码 ...

  9. python 随机数_python项目实战:实现蒙特卡罗方法,求物体阴影面积

    前言 蒙特卡罗方法是指使用随机数(或更常见的伪随机数)来解决很多计算问题的方法.与它对应的是确定性算法.蒙特·卡罗方法在金融工程学,宏观经济学,计算物理学(如粒子输运计算.量子热力学计算.空气动力学计 ...

最新文章

  1. 如何获取URL中的参数
  2. 【PAT笔记】PAT中的散列思想
  3. 文献学习(part15)--Subspace Clustering via Good Neighbors
  4. android 微信分享gif图,android后台动态创建图片并实现微信分享
  5. 屠呦呦凭什么获诺奖?
  6. 如何在 Mac 上的“快速查看”中查看和编辑文件
  7. docker-ovs遇到的问题以及解决办法
  8. boost基础——随机数生成器
  9. [转载] [python3教程]第七章.输入输出(Input and Output)
  10. 3GPP TS 24.301 Release 8 中文版
  11. JS 获取当前页面url(不含参数)
  12. MACBOOK 快捷键与系统设置
  13. hive percentile_approx原理
  14. 辉芒微IO单片机FT60F121-RB
  15. 2019华为优招-南研所
  16. python 从文件中读取数据,同时去除掉空格和换行
  17. TI CC3200 WIFI实训开发套件(OURS-SDK-WFB)IAR for ARM7.8调试2————对IAR for ARM的熟悉,并在开发板上跑起来第一个程序
  18. 【软件测试】瓶颈?资深测试聊测试开发的瓶颈在哪?
  19. 随笔:linux系统修改root账户名
  20. JavaScript基本结构

热门文章

  1. oracle如何配置dns连接,图文详解添加DNS服务器的操作步骤
  2. java web定义数组_Java基础之数组--数组常用操作
  3. java调用net webservice_java调用.net的webservice
  4. 大家都在聊的人工智能,究竟是什么?
  5. 云计算基础介绍,比喻小理解!
  6. 2013第四届蓝桥杯Java组省赛题解析
  7. 十大最主流的PHP框架
  8. Paxos一致性协议
  9. centos7安装sftp服务器
  10. Oracle 11gR1 默认设置调整