HDU 6362(求椭圆中矩形周长的期望 数学)

题意是给定一个椭圆标准方程的a,b(椭圆的长半轴长和短半轴长),在【0,b】内取一个数,则过点(0,b)且平行于x轴的直线与椭圆交于两点,再将此两点关于x轴做对称点,顺次连接此四点构成矩形,求出这些矩形周长的期望。

一开始的时候,想到所有矩形的周长和积分就是椭圆面积的两倍,但矩形的个数应该是 a + b,可是与样例不符......又尝试了矩形个数为a,b,π/2,均不对。再次读题,发现矩形的选择是在【0,b】中选的,那么矩形的个数就应该是b个。

依照题意,用积分的方法做,可得:

 

积分后得:a*b*π+2*b*b;再除以b,得到期望。

要注意的是题目要求保留到小数点后六位,但不是四舍五入的方式,而是去尾法,这里本人用的方法是先乘以1000000去尾,再除以1000000。

但后来发现网上还有好办法:将结果减去0.0000005,再直接四舍五入保留到后六位。妙啊~~

 1 #include <cstdio>
 2 #include <cmath>
 3 using namespace std;
 4 int main()
 5 {
 6     int t,n,m;
 7     const double p = acos(-1);
 8     scanf("%d",&t);
 9     while (t--)
10     {
11         scanf("%d%d",&n,&m);
12         double ans = n*p+m*2.00;
13         ans *= 1000000;
14         ans = floor(ans);
15         ans /= 1000000;
16         printf("%.6lf
",ans);
17     }
18     return 0;
19 }
View Code

个人认为椭圆面积*2应该等于所有矩形周长和,如图示,

但结果是2*a*b*π,而非积分结果a*b*π+2*b*b,我觉得应该是椭圆上点的分布不均导致的,具体的因为才疏学浅,无法详细描述。仍在考虑中......

日后若能有更好的想法,再来完善。 希望看到的大神不吝赐教 orz
原文地址:https://www.cnblogs.com/Taskr212/p/9455586.html