FZU 2099 魔法阵(数学题)
魔法阵
Description
两个正三角形和一个圆组成一个魔法阵,如图,圆心和正三角形内心重合,三角形的重叠部分是一个正六边形。求魔法阵轮廓围成的面积。
Input
第一行一个整数T表示数据组数(T<=1000)。接下来T行每行2个实数,正三角形边长L和圆的半径R(0<L,R<1000)。
Output
对于每组数据输出一个实数,魔法阵轮廓围成的面积,保留2位小数。
Sample Input
4 493.5 176.4 741.7 374.0 100.0 1.0 1.0 100.0
Sample Output
141994.02 449787.96 5773.50 31415.93
Hint
魔法阵轮廓可能退化成一个圆或者一个六芒星。
代码如下:
View Code
1 #include<stdio.h> 2 #include<math.h> 3 double pi=acos(-1.0); 4 const double k=sqrt(3.0); 5 int main() 6 { 7 int cas; 8 double L,R; 9 scanf("%d",&cas); 10 while(cas--) 11 { 12 scanf("%lf %lf",&L,&R); 13 14 double t=L*k/3.0; 15 if(t<=R) printf("%.2lf\n",pi*R*R); 16 else if(L/3.0>=R) 17 { 18 double s=k/4.0*L*L; 19 s=s*4/3.0; 20 printf("%.2lf\n",s); 21 } 22 else 23 { 24 double b=t; 25 double san=4*R*R-b*b; 26 san=sqrt(san); 27 double x; 28 x=(k*b-san)/2.0; 29 double s1=x*b/4.0; 30 t=x/(2.0*R); 31 t=asin(t); 32 double s2=pi*R*R*t/(2*pi); 33 double s=(s1-s2)*12+pi*R*R; 34 printf("%.2lf\n",s); 35 } 36 } 37 return 0; 38 }
把每一件简单的事情做好,就是不简单;把每一件平凡的事情做好,就是不平凡!相信自己,创造奇迹~~