ACM_圆的面积
圆的面积
Time Limit: 2000/1000ms (Java/Others)
Problem Description:
AB是圆O的一条直径,CD、EF是两条垂直于AB的弦,并且以CD为直径的半圆和以EF为直径的半圆正好切于点T。 给定CD和EF的长度,求圆O的面积(Pi取3.1416)。
Input:
输入包含多组测试数据,每组测试数据输入两个数a(1<=a,b<=10^5),b代表CD和EF的长度。
Output:
对于每组数据,输出圆O的面积,保留两位小数。
Sample Input:
3 5 2 3
Sample Output:
26.70 10.21
解题思路:由题意得CD、EF这两条边是一定不会重合的,即在圆心的两侧。假设a=CD/2,b=EF/2,r为所求圆的半径,则当a==b时,由对称性可得r=√(2)*a,此时S=πr2=2*πa2;当a!=b时,有重叠的部分OT,列式子有:a-√(r2-a2)=b-√(r2-b2),化简得r2=a2+b2;所以此时S=π*(a2+b2),推导完毕。
AC代码:
1 #include<bits/stdc++.h> 2 using namespace std; 3 #define PI 3.1416 4 int main() 5 { 6 double x,a,b; 7 while(cin>>a>>b){ 8 a/=2.0;b/=2.0; 9 if(a==b)x=2*a*a*PI; 10 else x=(a*a+b*b)*PI; 11 cout<<setiosflags(ios::fixed)<<setprecision(2)<<x<<endl; 12 } 13 return 0; 14 }