7/21 C 解题报告
这个题可以用数学方法,找最小值,求导后在区间内只有一个零点,和解方程又是一样的。如果直接分三个点后去查的话就有一些误差。
以下是代码(可直接AC):
#include <iostream>
#include <cmath>
#include <iomanip>
using namespace std;
int main()
{
int t;
long long y;
long double res,resl,resr;
long double tmp;
double low=0,high=100;
double mid=50;
bool flag;
cin>>t;
while(t--)
{
low=0;high=100;mid=50;
cin>>y;
while(low<high)//二分
{
res=42*mid*mid*mid*mid*mid*mid+48*mid*mid*mid*mid*mid+21*mid*mid+10*mid-y;
if(abs(res)<1e-7)
{
cout<<setiosflags(ios::fixed)<<setprecision(4);
cout<<6*mid*mid*mid*mid*mid*mid*mid+8*mid*mid*mid*mid*mid*mid+7*mid*mid*mid+5*mid*mid-y*mid<<endl;
break;
}else{
if(res>0)
{
high=mid;
mid=(high+low)/2;
}else{
low=mid;
mid=(high+low)/2;
}
}
}
}
return 0;
}