二分解方程
题目描述
给定一个方程,请你求出0~100的解
输入
第一行是样例个数T(1<=T<=100),接下来T行,每行有一个实数y(
).
输出
对每个样例,输出该方程的一个实数解,小数点后保留四位,如果在0-100无解,就请输出“No solution!”
样例输入 复制
2
100
-4
样例输出 复制
1.6152
No solution!
二分
简单二分法,不过要注意的是二分终止的精度和最后判断与输入的 y 是否相等时的精度不同
#include <bits/stdc++.h>
using namespace std;
const int N =100000;
long long a[N];
double cal(double x)
{
double ans=8.0*x*x*x*x+7.0*x*x*x+2.0*x*x+3*x+6.0;//方程
return ans;
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
double y;
scanf("%lf",&y);//输入类型是double(~ ̄(OO) ̄)ブ
double l=0,r=100;
while(r-l>1e-10)//二分终止精度一般要在保留小数位的后两位以上
{
double mid=(l+r)/2.0;
if(cal(mid)>=y) r=mid;
else l=mid;
}
double a=cal(l);
//被坑这了
if(fabs(a-y)<=1e-3)//结果必须与输入的y相差不超过3位小数(0.001)
printf("%.4lf\n",l);//保留4位小数
else
printf("No solution!\n");
}
return 0;
}