Time Limit: 1000MS | Memory Limit: 30000K | |
Total Submissions: 10901 | Accepted: 2802 |
Description
Input
Output
Sample Input
1000 100 0.0001 15000 10 0.00006 10 0 0.001 -1 -1 -1
Sample Output
61.329 225.020 0.000
思路:采用对半径进行二分的思想
1 #include<iostream> 2 #include<stdio.h> 3 #include<string.h> 4 #include<math.h> 5 #define M 0xfffffff 6 using namespace std; 7 int main() 8 { 9 double n,L,L1,c; 10 while(scanf("%lf%lf%lf",&L,&n,&c)!=EOF) 11 { 12 if(L<0) 13 break; 14 if(n*c<0.000001)//此种情况不能构成圆形 15 { 16 printf("0.000\n"); 17 continue; 18 } 19 L1=(1+n*c)*L; 20 double low=0,high=M,mid; 21 while(high-low>0.000001) 22 { 23 mid=(high+low)/2; 24 double angle=asin(0.5*L/mid); 25 if(2*angle*mid<L1) 26 high=mid; 27 else 28 low=mid; 29 } 30 printf("%.3lf\n",mid-sqrt(mid*mid-0.5*L*0.5*L)); 31 } 32 return 0; 33 }
原文:http://www.cnblogs.com/lxm940130740/p/3642427.html