文章目录链接:https://ac.nowcoder.com/acm/problem/15717
来源:牛客网
- 解方程
- 题目描述
- 输入描述:
- 输出描述:
- 分析:
- C语言方法
- 总结
题目描述
对于方程 2018 * x ^ 4 + 21 * x + 5 * x ^ 3 + 5 * x ^ 2 + 14 = Y,
告诉你Y的值,你能找出方程在0~100之间的解吗?。
输入描述:
第一行输入一个正整数T(表示样例个数)
接下来T组样例
每组样例一行,输入一个实数Y
一行输出一个样例对应的结果,
输出方程在0~100之间的解,保留小数点后4位小数;如果不存在,输出 -1
将0和100代入方程可以得到 y 的范围,当 x 的解不是整数时就比较麻烦了,不能用2018pow(mid,4)+21mid+5pow(mid,3)+5pow(mid,2)+14=y去判断,因为计算机运算时会损失精度,所以只能得到一个逼近正确值的近似解。
C语言方法代码如下:
#include#include int main() { int t; scanf("%d",&t); for(int i=0;i double y,left=0,right=100,mid; scanf("%lf",&y); if(y<=14||y>201805052114) printf("%dn",-1); else { while(right-left>=0.00001) { mid=(right+left)/2; if(2018*pow(mid,4)+21*mid+5*pow(mid,3)+5*pow(mid,2)+14>y) right=mid; else left=mid; } if(y<=14||y>201805052114) printf("%dn",-1); else printf("%.4lfn",left); } } }
总结
精度损失,变量声明,浮点数的二分法,浮点数二分法的循环退出条件,浮点数二分法的区间收缩



