杭电2199——Can you solve this equation?
作者:互联网
题目大意
解题思路
本题主要采用二分法的思路解题
代码实现
1 #include<iostream>
2 #include<cmath>
3 using namespace std;
4 double f(double x){
5 return 8*pow(x,4)+7*pow(x,3)+2*pow(x,2)+3*x+6;
6 }
7 int main(){
8 int t;
9 cin>>t;
10 while(t--){ //t次循环输入y值
11 double y,left=0,right=100.0;
12 double middle=(left+right)/2;
13 cin>>y;
14 if(f(0)>y||f(100)<y)
15 cout<<"No solution!"<<endl; //y的值不在f(0)与f(100)的值之间,故y对应的x的解不在【0,100】,方程无解
16 else{
17 while(right-left>1e-7) {
18 if(f(middle)==y)
19 break; //找到值之后终止循环
20 else if(y<f(middle))
21 right=middle-1e-7; //y对应的值在左半侧,移动right的值,更改查询范围
22 else if(y>f(middle))
23 left=middle+1e-7;
24 middle=(left+right)/2; //y对应的值在右半侧,移动left的值,更改查询范围
25 }
26 printf("%0.4f\n",middle);
27 }
28 }
29 return 0;
30 }
遇到的bug
1数据类型为double型
2由于所求结果要保留四位小数,因此靠考虑好精度的问题
标签:right,int,double,equation,杭电,middle,pow,2199,left 来源: https://blog.csdn.net/Zqy_123789/article/details/119908033