设宽度为w,二分w。
1 #include <cstdio> 2 #include <cmath> 3 #include <algorithm> 4 5 #define eps 1e-6 6 7 using namespace std; 8 9 int main() 10 { 11 double x, y, c; 12 while ( ~scanf( "%lf%lf%lf", &x, &y, &c ) ) 13 { 14 double high = min( x, y ); 15 double low = 0.0; 16 double mid; 17 while ( low < high ) 18 { 19 mid = ( low + high ) / 2.0; 20 double cc = sqrt( x*x - mid*mid )*sqrt( y*y - mid*mid ) / ( sqrt( y*y - mid*mid ) + sqrt( x*x - mid*mid ) ); 21 if ( fabs( cc - c ) < eps ) 22 { 23 break; 24 } 25 else if ( cc < c ) high = mid; 26 else low = mid; 27 } 28 29 printf( "%.3f\n", mid ); 30 } 31 return 0; 32 }