我又来水博客啦
这次的题目啊,真的水到不行,宁看看这题,没有输出入要求,就一个点,那我直接暴力输出不就行了,来看看
我一开始的代码啊
#include<iostream> #include<cstdio> #include<algorithm> #include<cmath> #include<cstring> #define itn int using namespace std; int main() { cout<<"1.849016"<<endl; return 0; }
(前面的那一堆头文件是新建就有,不是我特意打上的,逃)
宁看看,满打满算7行就够了,为什么要这么麻烦,还用二分,但是言归正传,我们在水题的时候,当然可以解出方程来,输出。可是如果这个式子再长一点,再难算一点呢?
所以还是要正儿八经的用二分。(话说我们课上刚刚学了二分法解方程)
找零点的时候,只用考虑[f(a)*f(b)<0]&&这个函数是连续不断的就可以了
所以就看一下AC代码吧
#include<iostream> #include<cstdio> #include<algorithm> #include<cmath> #include<cstring> #define itn int #define E 1e-7 using namespace std; double f(double x) { double y=x*x*x*x*x-15*x*x*x*x+85*x*x*x-225*x*x+274*x-121; return y; } int main() { double left=1.5,right=2.4; while(left+E<right) { double mid=(left+right)/2.0; if(f(mid)>0) left=mid; else right=mid; } if(f(left)==0) printf("%.6lf\n",left); else printf("%.6lf\n",left); return 0; }
按要求的六位输出别忘了,
还有就是千万别忘了开double,不然你出不来这个数