下面的程序是什么意思?求出来的是什么值?
#include <stdlib.h>
int main()
{
int rgnC = 0, LOOP;
scanf("%d\n", &LOOP);
int x, y, i;
for (i = 0; i < LOOP; i++)
{
x = rand();
y = rand();
if (x*x + y*y < RAND_MAX*RAND_MAX)
rgnC++;
}
printf("%d\n", rgnC);
return 0;
}
这个程序蕴涵的思想是一个1/4圆与一个正方形比较大小的问题,如下图:
RAND_MAX是rand()函数生成的最大随机数,RAND_MAX*RAND_MAX是以该值为半径的正方形面积
x*x + y*y 是(x,y)到原点的距离,距离可能大于R,如b,小于R,如a。
题目意思就是在正方形中落LOOP个点,落在以RAND_MAX为半径的圆的点有多少个,
所以比值应该为以RAND_MAX为半径的圆与以RAND_MAX为正方形的面积之比。
计算如下:
1/4圆面积:(1/4)*pi*r*r;
正方形面积:r*r;
二者之比:pi/4
落点数:pi/4 * LOOP
LOOP越大,落点总数rgnC/LOOP的值越接近pi/4