关闭

洛谷OJ - P1024 - 一元三次方程求解(二分答案)

标签: 二分答案
592人阅读 评论(0) 收藏 举报
分类:
题目描述
有形如:ax3+bx2+cx+d=0 这样的一个一元三次方程。给出该方程中各项的系数(a,b,c,d 均为实数),并约定该方程存在三个不同实根(根的范围在-100至100之间),且根与根之差的绝对值>=1。要求由小到大依次在同一行输出这三个实根(根与根之间留有空格),并精确到小数点后2位。提示:记方程f(x)=0,若存在2个数x1和x2,且x1<x2,f(x1)*f(x2)<0,则在(x1,x2)之间一定有一个根。
输入
一行,4个实数A,B,C,D。
输出
一行,三个实根,并精确到小数点后2位。
样例输入
1 -5 -4 20
样例输出
-2.00 2.00 5.00
题目思路

题目给出根在-100到100之间,并且根与根之差的绝对值>=1  那么我们便枚举每两个相邻的数字,如果确定根在这两个数字之间。那么在这两个数字中二分查找答案即可。

题目代码
#include <cstdio> 
#include <iostream>
#include <map>
#include <set>
#include <vector>
#include <stack>
#include <cmath>
#include <string>
#include <cstring>
#include <algorithm>
#define LL long long  
using namespace std;
double ans1, ans2, ans3;
double a, b, c, d;
double l, r, mid;


double f1(double x){
	return x*x*x*a + x*x*b + x*c +d;	
}

double F(double x, double y){
	l = x; r = y;
	while(l < r){
		mid = (l+r) / 2.0;
		double ans1 = f1(l);
		double ans2 = f1(mid);
		if((ans1*ans2) <= 0)
			r = mid;		
		else
			l = mid + 0.00001;
	}
	return r;
}

int main(){

	while(scanf("%lf%lf%lf%lf",&a,&b,&c,&d) != EOF){
		for(double i = -100; i <= 100; i++){
			double ans1 = f1(i);
			double ans2 = f1(i+1);
			if(ans1 == 0)
				printf("%.2f ",i);
			
			if((ans1*ans2) < 0){
				ans1 = F(i, i+1.0);
				printf("%.2f ",ans1);
			}
		}
		printf("\n");	
	}
	return 0;
}


1
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

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

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

一元三次方程求解c++实现

typedef  double Number; class CubicRealPolynomial { public:     static Number computeDiscriminan...
  • zg260
  • zg260
  • 2014-11-21 15:36
  • 1476

C++练习题:求一元二次方程的根

题目要求: 总时间限制:  1000ms 内存限制: 65536kB 描述 利用公式x1 = (-b + sqrt(b*b-4*a*c))/(2*a), x2 = (-b - sq...
  • u013721768
  • u013721768
  • 2016-04-11 20:24
  • 3870

P1024 一元三次方程求解 luogu

题目描述 有形如:ax3+bx2+cx+d=0 这样的一个一元三次方程。给出该方程中各项的系数(a,b,c,d 均为实数),并约定该方程存在三个不同实根(根的范围在-100至100之间),且根与根之...
  • qq_16964363
  • qq_16964363
  • 2017-01-01 10:51
  • 310

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

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 这道题是一道明显的二分题。 有题可知精度为0.01,且三个解均在-100...
  • w19960702123
  • w19960702123
  • 2014-10-27 14:32
  • 825

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

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

算法训练 一元三次方程求解 二分

算法训练 一元三次方程求解   时间限制:1.0s   内存限制:256.0MB        问题描述   有形如:ax3+bx2+cx+d=0 这样的一个一元三...
  • jerans
  • jerans
  • 2017-04-26 21:47
  • 499

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

  • 2017-08-27 17:43
  • 4KB
  • 下载

卡尔丹公式求解一元三次方程的新解法源代码及演示程序

  • 2009-07-03 15:40
  • 244KB
  • 下载

【Openjudge:Noi】7891:一元三次方程求解 c++

【Openjudge:Noi】7891:一元三次方程求解 总时间限制:  1000ms  内存限制:  65536kB 描述 有形如:ax3+bx2+cx+d=0  这样的一...
  • u013675643
  • u013675643
  • 2016-07-01 16:25
  • 1221
    个人资料
    • 访问:350914次
    • 积分:10565
    • 等级:
    • 排名:第1831名
    • 原创:693篇
    • 转载:14篇
    • 译文:0篇
    • 评论:63条
    `
    加油加油 努力努力
    博客专栏
    文章分类