一元三次方程求解WA
查看原帖
一元三次方程求解WA
282292
966123anyunchuan楼主2021/3/21 19:06
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
double a, b, c, d;
double f(double x)
{
	return a*x*x*x+b*x*x+c*x+d;
}
int main()
{
	cin>>a>>b>>c>>d;
	
	for(double i=-100; i<=100; i++)
	{
		double l=i, r=i+1, eps=1e-4;
		if(fabs(f(l))<eps)
		{
			printf("%.2lf ", l);
		}else{
			if(fabs(f(r))<eps)
			{
				continue;
			}else{
				if(f(l)*f(r)<eps)
				{
					while(l+eps<r)
					{
						double mid=(l+r)/2;
						if(f(mid)*f(l)>eps)
						{
							l=mid;
						}else{
							r=mid;
						}
					}
					if(fabs(f(l))<eps)
					{
						printf("%.2lf ", l);
					}
				}
			}
		}
	}
	return 0;
}

用二分写的,WA了,50分

但是之后把二分后

if(fabs(f(l))<eps)
{
	printf("%.2lf ", l);
}

改为

printf("%.2lf ", l);

就AC了

我知道我这个代码如果执行了二分,那肯定能找到根,但如果 l 是根,那不应该满足

fabs(f(l))<eps	//(代入原方程使方程成立)

吗?为啥有的根不满足?

蒟蒻跪求大佬,谢谢!

2021/3/21 19:06
加载中...