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\n",e);

25         else if(Y>(log(e)/e))

26         {

27             printf("Happy to Women’s day!\n");

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\n",lb);

51 

52         }

53     }

54     return 0;

55 }
View Code

 

你可能感兴趣的:(IO)