欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

二分法试题

程序员文章站 2022-06-03 13:58:26
...

洛谷:P1024 一元三次方程求解

二分法试题
代码:

#include<iostream>
#include<stdio.h>
using namespace std;
double a,b,c,d;
int s=0;
double Count(double n)//判断函数,方便简洁。
{
        return a*n*n*n+b*n*n+c*n+d;
}
int main()
{
    cin>>a>>b>>c>>d;
    for(double i=-100;i<100;i++)
    {
        double l=i;
        double r=i+1;
        if(Count(l)==0)//这是当答案是整数的时候,
        {
            printf("%.2lf ",l);
            s++;
        }
        if(Count(r)*Count(l)<0)//这里是判断当函数是小数的时候。
        {
            while(r-l>=0.001)//这里一定要有等于号,这里也一定要是0.001,
            //因为要保存2位小数,因此当差是3位小数的时候,就不需要判断了。
            //这样写就保证了r与l的差值小数点第三位一直是0,
            //因此在最后选结果的时候选r或l都行,因为小数点第三位都是小于4.不影响结果。
            //所以以后这样的二分法,最后选取结果一定要想想怎么写判断循环结束,和怎么选取结果。
            {
                double mid=(r-l)/2+l;
//                if(Count(mid)=0)
//                {
//                    s++;
//                    printf("%.2lf ",mid);
//                }
                if(Count(mid)*Count(l)>0)
                l=mid;
                else
                r=mid;
            }
            printf("%.2lf ",r);
        s++;
        }
        if(s==3)
            break;
    }
    return 0;
}