zoukankan      html  css  js  c++  java
  • P1024 一元三次方程求解

    实数二分的题。
    第一次写的时候,发现这样的写法无法处理mid正好是根的情况,会重复输出mid。
    巧就巧在这题的数据保证不会出现长度为1的区间内出现2个根的情况,所以可以改写代码。

    原始代码

    #include<iostream>
    #include<cstdio>
    
    using namespace std;
    
    double a, b, c, d;
    
    double calc(double x){
        return a * x * x * x + b * x * x + c * x + d;
    }
    
    void dfs(double l, double r){
        if(r - l <= 1e-3){
            if(calc(l) * calc(r) <= 0) printf("%.2lf ", l);
            return;
        }
        double mid = (l + r) / 2;
        dfs(l, mid), dfs(mid, r);
    }
    
    int main(){
        cin >> a >> b >> c >> d;
        
        dfs(-100, 100);
    }
    

    改写代码

    因为题目数据保证不会出现长度为1的区间内出现2个根的情况,所以如果mid为根,那么[mid - 1, mid) 区间内一定不会有根,所以就可以扔掉这个区间了,保证不会重复输出mid。

    #include<iostream>
    #include<cstdio>
    
    using namespace std;
    
    double a, b, c, d;
    
    double calc(double x){
        return a * x * x * x + b * x * x + c * x + d;
    }
    
    void dfs(double l, double r){
        if(r - l <= 1e-3){
            if(calc(l) * calc(r) <= 0) printf("%.2lf ", l);
            return;
        }
        double mid = (l + r) / 2, d = 0;
        if(calc(mid) == 0) d = 1;
        dfs(l, mid - d), dfs(mid, r); 
    }
    
    int main(){
        cin >> a >> b >> c >> d;
        
        dfs(-100, 100);
    }
    
  • 相关阅读:
    HTTP GET POST PUT DELETE 四种请求
    PHP表达式
    PHP基础
    文件存储
    动态加载布局文件
    Android新增控件
    Spring简介
    Hibenate配置篇
    无题
    struts常用标签与校验器
  • 原文地址:https://www.cnblogs.com/tomori/p/13797880.html
Copyright © 2011-2022 走看看