三分。。
#include<stdio.h>
#include<math.h>
#define eps 1e-7
double y;
double f(double x)
{
return 6.0*pow(x,7.0)+8.0*pow(x,6.0)+7.0*pow(x,3.0)+5.0*pow(x,2.0)-y*x;
}
double ts()
{
double l=0,r=100,mid,midmid;
while(r-l>eps)
{
mid=(l+r)/2.0;
midmid=(mid+r)/2.0;
double cmid=f(mid);
double cmidmid=f(midmid);
if(cmid<cmidmid)
r=midmid;
else
l=mid;
}
return r;
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
scanf("%lf",&y);
printf("%.4lf\n",f(ts()));
}
return 0;
}
当然这题也可以二分,因为这个函数可以求导,对导函数二分就可以了,但不是所有的函数都可以求导。。
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
double y;
double f1(double x)
{
return 6.0*pow(x,7.0)+8.0*pow(x,6.0)+7.0*pow(x,3.0)+5.0*pow(x,2.0)-y*x;
}
double f2(double x)
{
return 42.0*pow(x,6.0)+48.0*pow(x,5.0)+21.0*pow(x,2.0)+10.0*x;
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
scanf("%lf",&y);
double l,r,m;
l=0.0;
r=100.0;
while(r-l>1e-8)
{
m=(l+r)/2.0;
if(f2(m)>y)
r=m;
else
l=m;
}
printf("%.4lf\n",f1(m));
}
return 0;
}