江西财经大学第一届程序设计竞赛 F-解方程
链接:https://www.nowcoder.com/acm/contest/115/F
来源:牛客网
题目描述
对于方程 2018 * x ^ 4 + 21 * x + 5 * x ^ 3 + 5 * x ^ 2 + 14 = Y,
告诉你Y的值,你能找出方程在0~100之间的解吗?
输入描述:
第一行输入一个正整数T(表示样例个数)
接下来T组样例
每组样例一行,输入一个实数Y
输出描述:
一行输出一个样例对应的结果,
输出方程在0~100之间的解,保留小数点后4位小数;如果不存在,输出 -1
示例1
输入
2
1
20180421
输出
-1
9.9993
思路
二分法。
此题和 2018年东北农业大学春季校赛 A-wyh的曲线 有异曲同工之妙。
AC代码
#include <iostream>
#include <iomanip>
using namespace std;
double getY(double x) {
return x*x*x*x*2018+x*21+x*x*x*5+x*x*5+14;
}
int main() {
int T;
cin >> T;
while(T--) {
double Y;
cin >> Y;
if(getY(100)<Y || Y<14) {
cout << -1 << endl;
} else {
double right=100.0,left=0.0,mid;
while(right-left > 1e-5) {
mid=(right+left)/2.0;
if(getY(mid)>Y)
right=mid;
else
left=mid;
}
cout << fixed << setprecision(4) << mid << endl;
}
}
return 0;
}