其他分享
首页 > 其他分享> > 杭电2199——Can you solve this equation?

杭电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