一元三次方程求解(有bug)——分治

原创 2015年11月18日 00:40:06

simple description:
形如ax^3+bx^2+cx+d=0的方程,求其解
根与根之间差值的绝对值比1大
精确到小数点后4位

分析:
求解高次方程的解,最简单的做法就是用零点存在定理(point 1)。
用简单枚举过于复杂而耗时。
因而选择使用分治的方法。

#include <stdio.h>
#include <math.h>
#define p 0.0001
int a, b, c, d;
double mul(double k);
double key(double a, double b);

int main() {
    scanf("%d %d %d %d", &a, &b, &c, &d);
    for(double i = -100; i <= 100; i ++) {
        if (mul(i) == 0) {
            printf("%lf\n", i);
        } else if (mul(i) * mul(i + 1) < 0) {
            double m = key(i, i + 1);
            printf("%.4lf\n", m);
        }
    }
    return 0;
}

double mul(double k) { //计算方程的值
    double h = a * pow(k, 3) + b * pow(k, 2) + c * pow(k, 1) + d;
    return h;
}

double key(double a, double b) { //零点存在定理的判断
    if (mul((a + b) /2) == 0 || a + 0.0001 > b) {
        return (a + b) / 2;//要么求出这个值,要么超过精确值。
    } else if (mul(a) * mul((a + b) / 2) < 0) {
        return key(a, (a+b) / 2);
    } else if (mul(b) * mul((a + b) / 2) < 0) {
        return key((a+b) / 2, b);
    }
    return 0;//最后一定要有这个返回值,不然会报错。
}

ps:此题有bug,无法解决根之间差值小于1的问题。

feeling:
分治算法难理解,多思考,多做题。
坚持!!

版权声明:本文为博主原创文章,未经博主允许不得转载。

某叶C语言学习上重大的一步——一元三次方程求解

目前某叶编的最难的程序了......感觉算是跨越吧,之前最难的是一元二次方程求解,虽然是最“难”的,只是因为最长,但是写起来还是很轻松的   不过一元三次方程可一点都不轻松,很累,因为没学过一元三次方...

【openjudge】一元三次方程求解(分治算法)

一元三次方程求解总时间限制: 1000ms 内存限制: 65536kB 描述 有形如:ax3+bx2+cx+d=0 这样的一个一元三次方程。给出该方程中各项的系数(a,b,c,d 均为实数),...

【codevs1038 一元三次方程求解】分治

这道题WA了将近两天!!!!!我最近一写题就WA,一WA就一天!!!!简直有毒。题目里说了根的范围是(−100,100) (-100, 100),而且根与根之差的绝对值>=1,那么思想就是把(−100...

C++求解一元三次方程代码

  • 2017年08月27日 17:43
  • 4KB
  • 下载

用盛金公式求解一元三次方程

解一元三次方程一般用盛金公式求解,算法高效且求出来的解精确。     百度百科关于盛金公式有如下解释: 盛金公式   Shengjin's Formulas   一元三次方程aX^3+bX^...

【Openjudge】一元三次方程求解

7891:一元三次方程求解 总时间限制: 1000ms 内存限制: 65536kB 描述 有形如:ax3+bx2+cx+d=0  这样的一个一元三次方程。 给出该方程中各项的系数(a...

vijos p1116(codevs 1038 )一元三次方程求解 题解

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 这道题是一道明显的二分题。 有题可知精度为0.01,且三个解均在-100...

noip2001一元三次方程求解(二分)

题目描述 Description 有形如:ax3+bx2+cx+d=0  这样的一个一元三次方程。给出该方程中各项的系数(a,b,c,d  均为实数),并约定该方程存在三个不同实根(根的范围在-...

Codevs 1038 一元三次方程求解

Codevs 1038 一元三次方程求解
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:一元三次方程求解(有bug)——分治
举报原因:
原因补充:

(最多只允许输入30个字)