B
来源:互联网 发布:mac ntfs读写插件 免费 编辑:程序博客网 时间:2024/04/27 15:09
题意:求方程 f(x) = 6 * x^7+8*x^6+7*x^3+5*x^2-y*x 的最小值
思路:可以借鉴第一题的思路,用二分法做题,在搜索,还是比较好的,
还有一种偷懒的方法,就是求倒数,这是一个在 0——100上的递增函数,然后再求倒数等于0时刻的x的值的大小,方法同上
#include <iostream>
#include <cmath>
#include <iomanip>
using namespace std;
double get(double mid,double y)
{
return 6*pow(mid,7)+8*pow(mid,6)+7*pow(mid,3)+5*mid*mid-mid*y;
}
double get1(double mid)
{
return 42*pow(mid,6)+48*pow(mid,5)+21*pow(mid,2)+10*mid;
}
double get0(double y)
{
double mid,low,high;
low=0,high=100;
while(high>low+0.0000001)
{
mid=(high+low)/2;
if(get1(mid)<y)
low=mid+0.0000001;
else high=mid-0.0000001;
}
#include <cmath>
#include <iomanip>
using namespace std;
double get(double mid,double y)
{
return 6*pow(mid,7)+8*pow(mid,6)+7*pow(mid,3)+5*mid*mid-mid*y;
}
double get1(double mid)
{
return 42*pow(mid,6)+48*pow(mid,5)+21*pow(mid,2)+10*mid;
}
double get0(double y)
{
double mid,low,high;
low=0,high=100;
while(high>low+0.0000001)
{
mid=(high+low)/2;
if(get1(mid)<y)
low=mid+0.0000001;
else high=mid-0.0000001;
}
return mid;
}
}
int main()
{
int T;
double Y;
cin>>T;
while(T--)
{
cin>>Y;
cout<<setiosflags(ios::fixed)<<setprecision(4)<<get(get0(Y),Y)<<endl;
}
return 0;
}
0 0