A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 冯超 高级黑马   /  2013-2-15 18:51  /  2568 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

利用随机函数求圆周率ぇ。

    编程思路:设有一个边长为1的正方形ABCD,则其面积为1,则s1 = 1*1=1;以A为圆心,以1为半径画狐,得到一个扇形ABD,s2 = 1*1*PI/4。
A-----------------------B
|                           |
|                           |
|                           |                                                              
|                           |
|                           |
C---------------------- D   
                         此贴为1活跃论坛,2看看技术大侠的思路,一千读者就有一千个哈姆雷特,3斑竹觉得这个题目好就给一个技术分(若没人我就自己说思路,绝不会打酱油。)                                                                                                                                                                          

未命名.jpg (5.72 KB, 下载次数: 35)

未命名.jpg

评分

参与人数 1黑马币 +9 收起 理由
李培根 + 9 赞一个!

查看全部评分

11 个回复

倒序浏览
我是来捣乱的.

画狐得到扇形应该是ABC

另外,求圆周率,知道割圆术.你说的随机函数是什么
回复 使用道具 举报
这个思路蛮好!用一个不断变小的随机数(比如除10),这样就可以得出一个逐渐精确的PI值。很巧妙!
回复 使用道具 举报
可是,我再认真的思考一下,居然很离谱。
很抱歉,这个我玩不了。
回复 使用道具 举报
等等看你是怎样推算圆周率PI的{:soso_e129:}
回复 使用道具 举报
我来分析:正方形面积为1,扇形面积为1/4 PI;
有图片可以知道:该曲线的方程为x*x + y * y = 1(0<=x,y<=1)
                         若:x*x + y * y <= 1,则该点落在扇形内。

姑且令正方形面积为M,扇形面积为N
  则:M/N = 4/PI;
PI  = 4 * N / M;
   
面积这个东西不好算,用点来表示吧。
设: 落在正方形中的点有M(x,y)个。
       若x*x + y * y <= 1,则M中有N个点落在扇形中。
  1. public class RandomTesy {
  2.         public static void main(String args[])
  3.         {
  4.                 int m = 100254;  //从这里输入M的值
  5.                 double PI = (double)4 * mNumber(m) / m;
  6.                
  7.                 System.out.println(PI);
  8.         }
  9.        
  10.         //产生的N的个数
  11.         public static int mNumber(int m)
  12.         {
  13.                 int n = 0;
  14.                 for(int i = 1; i <= m; i++)
  15.                 {
  16.                         double x = Math.random();//x大于或等于 0.0 但小于 1.0 的伪随机 double 值
  17.                         double y = Math.random();
  18.                        
  19.                         if(x * x + y * y <= 1)
  20.                         {
  21.                                 n++;
  22.                         }
  23.                 }
  24.                 return n;
  25.         }

  26. }
复制代码
************************************
   很抱歉这个帖子我没做好,今天刚回到学校,顺便把这个题目的思路给说下,大神有更好的想法也可以说一下。PI的值与你输入的m的值有关,若m为我上面的那个100254,则PI为3.143056636144194。

未命名.jpg (6.27 KB, 下载次数: 28)

未命名.jpg

未22命名.jpg (49.28 KB, 下载次数: 30)

未22命名.jpg
回复 使用道具 举报
江华 中级黑马 2013-2-21 23:50:13
7#
汗!
终于,想明白是怎么会事了!
这个想法真的奇特!!!!
回复 使用道具 举报
江华 中级黑马 2013-2-22 00:13:43
8#
这个是这样计算的。
圆 的方程式是    x*x+y*y=R*R  【圆半径的平方】。
圆的面积是   2*R*R*PI。
圆外切正方形的面积是  2R*2R

根据以上公式,随机的出现的点,所在的位置,会因为圆所占正方面积的比例,而成比例出现在圆内。

因为是随机的,也可能存在某两次出现了相同的值。
回复 使用道具 举报
冯超 高级黑马 2013-2-22 10:01:11
9#
江华 发表于 2013-2-22 00:13
这个是这样计算的。
圆 的方程式是    x*x+y*y=R*R  【圆半径的平方】。
圆的面积是   2*R*R*PI。

是的·谢谢关注本人的帖子@
回复 使用道具 举报
江华 发表于 2013-2-22 00:13
这个是这样计算的。
圆 的方程式是    x*x+y*y=R*R  【圆半径的平方】。
圆的面积是   2*R*R*PI。

是的·谢谢关注本人的帖子。
回复 使用道具 举报
这是用的JAVA写的代码
回复 使用道具 举报
令正方形面积为M,扇形面积为N
为什么:“M/N = 4/PI”啊; 有点不明白,求解释啊!!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马