HDOJ 2899 HDU 2899 Strange fuction ACM 2899 IN HDU

MiYu原创, 转帖请注明 : 转载自 ______________白白の屋

题目地址:
         http://acm.hdu.edu.cn/showproblem.php?pid=2899
题目描述:
Strange fuction

Time Limit: 
2000 / 1000  MS (Java / Others)    Memory Limit:  32768 / 32768  K (Java / Others)
Total Submission(s): 
95     Accepted Submission(s):  75


Problem Description
Now, here 
is  a fuction:
  F(x) 
=   6   *  x ^ 7 + 8 * x ^ 6 + 7 * x ^ 3 + 5 * x ^ 2 - y * x ( 0   <=  x  <= 100 )
Can you find the minimum value when x 
is  between  0  and  100 .
 

Input
The first line of the input contains an integer T(
1 <= T <= 100 ) which means the number of test cases. Then T lines follow, each line has only one real numbers Y.( 0   <  Y  < 1e10)
 

Output
Just the minimum value (accurate up to 
4   decimal  places),when x  is  between  0  and  100 .
 

Sample Input
2
100
200
 

Sample Output
- 74.4291
- 178.8534

题目分析:
纯数学题, 需要微积分的知识分析题目...........我承认....我数学没怎么学好..........
分析出来使用2分搜索就可以了..........

代码如下:
#include  < iostream >
#include 
< cmath >
using   namespace  std;
#define  POW(x) ( (x) * (x) )
#define  POW3(x) ( POW(x) * (x) )
MiYu原创, 转帖请注明 : 转载自 ______________白白の屋


#define
 POW4(x) ( POW(x) * POW(x) )
double  y  =   0 ;
double  cal (  double  n )
{
       
return   8.0   *  POW4(n)  +   7   *  POW3(n)  +   2   *  POW(n)  +   3   *  n  +   6  ;
}
int  main ()
{
    
int  T;
    scanf ( 
" %d " , & T );
    
while  ( T  --  )
    {
          scanf ( 
" %lf " , & y );
          
if  ( cal( 0 >  y  ||  cal( 100 <  y )
          {
               printf ( 
" No solution!\n "  );
               
continue ;
          }
          
double  l  =   0.0 , r  =   100.0 ,res  =   0.0 ;
          
while  ( r  -  l  >  1e - 6  )
          {
                
double  mid  =  ( l  +  r )  /   2.0 ;
                res 
=  cal ( mid );
                
if  ( res  >  y )
                     r 
=  mid  -  1e - 6 ;    
                
else  
                     l 
=  mid  +  1e - 6 ;
          }
          printf ( 
" %.4lf\n " ,( l  +  r )  /   2.0  ); 
    }
    
return   0
}

转载于:https://www.cnblogs.com/MiYu/archive/2010/08/18/1802688.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值