基础2分。

来源:互联网 发布:笑话源码 编辑:程序博客网 时间:2024/04/29 11:46

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();//解决问题。}



0 0
原创粉丝点击