Equation Again 最大化最小值

C - Equation Again
Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u
Submit Status

Description

This problem’s author is too lazy to write the problem description, so he only give you a equation like X (eY) == (eY) x, and the value of Y, your task is calculate the value of X. 
Note : here e is the Natural logarithm. 
 

Input

Each line will contain one number Y(Y >= 1). Process to end of file.
 

Output

For each case, output X on one line, accurate to five decimal places, if there are many answers, output them in increasing order, if there is no answer, just output “Happy to Women’s day!”.
 

Sample Input

1
 

Sample Output

2.71828
 1 #include <stdio.h>
 2 #include <math.h>
 3 
 4 const double INF=0x3f3f3f3f;
 5 const double s=1e-9;
 6 const double e=exp(1);
 7 double y,Y;
 8 
 9 bool C(double x)
10 {
11     if((log(x)/x)<(log(e*y)/(e*y)))
12         return true;
13     else
14         return false;
15 }
16 
17 int main()
18 {
19     int i,j;
20     while(scanf("%lf",&y)!=EOF)
21     {
22         double Y=(log(e*y)/(e*y));
23         if(y==1.0)
24             printf("%.5lf
",e);
25         else if(Y>(log(e)/e))
26         {
27             printf("Happy to Women’s day!
");
28         }
29         else
30         {
31             double lb=1.0,ub=e;
32             for(i=1;i<=1000;i++)
33             {
34                 double mid=(lb+ub)/2;
35                 if(C(mid))
36                     lb=mid;
37                 else
38                     ub=mid;
39             }
40             printf("%.5lf ",ub);
41             lb=e,ub=INF;
42             for(i=1;i<=1000;i++)
43             {
44                 double mid=(lb+ub)/2;
45                 if(C(mid))
46                     ub=mid;
47                 else
48                     lb=mid;
49             }
50             printf("%.5lf
",lb);
51 
52         }
53     }
54     return 0;
55 }
View Code
原文地址:https://www.cnblogs.com/cyd308/p/4681296.html