HDU 2199 Can you solve this equation? && NYOJ 503 解方程

题目链接~~>

做题感悟:这个题太坑(也许暗示着对二分还没掌握好),调精度调了半上午才调出来。

解题思路:在[ 0 , 100 ] 这个区间里函数是单调递增的所以与二分有一点的差别(个人感觉),只要在 F( 0 ) ~ F( 100 ) 之间的值都有解不断二分即可,也不用加 0.000001 ,其实加也可以.

总结一下 pow ( x , y ) :  

                 头文件:math.h/cmath(C++)

                 功能:计算x的y次 。 x 和 y 均为 double 类型,返回值也是 double .

                返回值:( 1 ) x不能为负数且y为小数,( 2 ) x为0且y小于等于0,这两种情况都不行。返回幂指数的结果。

                返回类型:double型,int,float会给与警告!

代码(HDU):

#include<stdio.h>
#include<math.h>
double n ;
double find(double x)
{
    return 8.0*pow(x,4)+7.0*pow(x,3)+2.0*pow(x,2)+3*x+6.0 ;
}
double binary_search(double x,double y) 
{
    double mx,mid ;
    while(x<=y)
    {
        mid=x+(y-x)/2.0 ;
        mx=find(mid) ;
        if(fabs(mx-n)<=0.0001) // 每次二分控制好精度
                   return mid ;
        else
             mx > n ? y=mid : x=mid ; // 此处不用 + 0.00001 或 - 0.00001,虽然那样也对
    }
    return -1 ;
}
int main()
{
    int T ;
    scanf("%d",&T) ;
    while(T--)
    {
        scanf("%lf",&n) ;
        if(find(0)>n||find(100)<n)
                 printf("No solution!\n") ;
        else
            printf("%.4lf\n", binary_search(0,100)) ;
    }
    return 0 ;
} 

刚开始的代码~~>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Linux猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值