Problem Descriptionnow,given the equation 8*x^4 + 7*x^3 + 2*x^2 + 3*x + 6 = = Y,can you find its solution between 0 and 100 ;
Now try your lucky. Inputthe first line of the input contains an integer T (1<=t<=100) which means the number of test cases. Then T lines follow with each line have a real number Y (Fabs (Y) <= 1e10) outputfor Each test case, you should just output O NE real number (accurate up to 4 decimal places), which are the solution of the Equation,or "no solution!", if there is no Sol Ution for the equation between 0 and 100.Sample Input
2100-4
Sample Output
1.6152No solution!
The code is as follows:
#include <iostream> #include <cmath> #include <iomanip>using namespace std;double y;double Equ (double x) { return 8*pow (x,4) +7*pow (x,3) +2*pow (x,2) +3*x+6; Determine if the equation is equal}double search () //Two min find { double high=100,low=0; Double temp; while (high-low>1e-6) { temp= (Low+high)/2; if (Equ (temp) <y) low=temp+1e-7; else high=temp-1e-7; } Return (High+low)/2.0;} int main () { int T; cin>>t; while (t--) { cin>>y; if (Equ (0) <=y&&equ () >=y) //If the condition is met, a value of 0 to 100 must exist in the middle to make Equ (x) =y cout<<setiosflags (ios::fixed) <<setprecision (4) <<search () <<endl; else cout<< "No solution!" <<endl; } return 0;}
Problem Solving Ideas:
The main idea is to find the x that satisfies 8*x^4 + 7*x^3 + 2*x^2 + 3*x + 6 = = In between 0 and 100.
Simple binary search, with emphasis on computational accuracy and output format.
Yt14-hdu-found the right x in 0-100.