Problem Description
Now,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 please try your lucky.
Input
The first line of the input contains an integer T(1<=T<=100) which means the number of test cases. Then T lines follow, each line has a real number Y (fabs(Y) <= 1e10);
Output
For each test case, you should just output one real number(accurate up to 4 decimal places),which is the solution of the equation,or “No solution!”,if there is no solution for the equation between 0 and 100.
Sample Input
2
100
-4
Sample Output
1.6152
No solution!
题意:给你Y的值,叫你求出X的值。一道十分基础的2分题。
下面上代码附上详细解析:
#include <stdio.h> double f(double x) { return 8*x*x*x*x+7*x*x*x+2*x*x+3*x+6;//列出题目的算式,下面的f(100)和f(0)、f(mid)都是这个的值。 } void pp() { double wbx,cc;//定义变量 int n; double y;;// 定义变量 double mid;//定义变量 scanf("%d",&n);//输入N代表案例个数 while(n--) { scanf("%lf",&y);//输入Y。 wbx=100.0; cc=0.0; if(y>f(100) ||y<f(0))//题目要求:如果Y的值大于f(100)或者小于f(0)则继续。 { printf("No solution!\n");//没有所求的X。 continue; } while(wbx-cc>1e-8)// 2分开始了,1e-8代表10的负8次方。取得越小越好,这样值才足够的精确。当这两个值相差大于1e-8时,不断的循环下面的操作。 { mid=(wbx+cc)/2.0;// 让mid等于两个和的一半。 if(f(mid)>y) //如果这f(mid)大于Y的话 { wbx=mid-1e-8;//让大的那个减小。 } else { cc=mid+1e-8;//否则让小的那个增加。 } } printf("%.4lf\n",mid);// 跳出循环后f(mid)自然等于Y了(可精确到小数点后7、8位吧)。而mid就是我们所求的x。题目只要保留4位小数就好了。四位时所求的mid和x的值一定是相等的。 } } int main() { pp();//解决问题。 }
时间: 2024-10-31 03:28:01