关闭

wikioi 1038 一元三次方程求解

486人阅读 评论(0) 收藏 举报

http://wikioi.com/problem/1038/

提示:记方程f(x)=0,若存在2个数x1x2,且x1<x2f(x1)*f(x2)<0,则在(x1x2)之间一定有一个 根。

题目给了方法,正统二分(交了7次,二分真tm难)

void find(double bit,double top,bool f1,bool f2)
{
if(top-bit<0.01) 
{
printf("%.2lf ",top);
return;
}
double x=(bit+top)/2;
double y=(a*x*x*x+b*x*x+c*x+d);
bool f;
if(y>0) f=true;
else f=false;
if(f!=f1) find(bit,x,f1,f);
if(f!=f2) find(x,top,f,f2);
}

自己的还是暴力吧

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
double a,b,c,d;
double x[10];
int xl=1;
double l,r;
double f(double x)
{
	double fz;
	fz=a*x*x*x+b*x*x+c*x+d;
	return fz;
}
int main()
{
	cin>>a>>b>>c>>d;
	for(double i=-100.000;i<=100.000;i=i+0.001)//暴力枚举了0.0
	{
        if(f(i)*f(i+0.001)<=0)printf("%.2lf ",i);
	}
}
			


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:18221次
    • 积分:586
    • 等级:
    • 排名:千里之外
    • 原创:42篇
    • 转载:0篇
    • 译文:0篇
    • 评论:1条
    文章存档
    最新评论