wikioi 1038 一元三次方程求解

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值