您的位置:首页 > 其它

宁波工程学院 [1346] 虎追兔,兔躲虎 二分法 精确度小细节

2013-03-02 23:43 148 查看
http://ac.nbutoj.com/Problem/view.xhtml?id=1346

[1346] 虎追兔,兔躲虎

时间限制: 1000 ms 内存限制: 65535 K 问题描述
老虎想和兔子玩, 所以老虎一直追着兔子, 兔子觉着老虎很笨, 就一直躲着老虎.

有天, 兔子躲烦了. 停下来对老虎说 : "我最近对一个问题感到十分的困惑, 如果你能帮我解决我的问题, 我就不躲着你了."

有一个方程, 如下所示.



其中0 < q, s, t, u< 500 且 r , v < 0.

兔子想知道该方程在 [0, 1] 区间内的所有解.

老虎一下子就不知道该怎么办了.
输入
本题有多组输入, 对于每组数据, 在一行内包含q, r, s, t, u, v
输出
对于每一组输出, 从小到大输出方程的所有解, 用空格分隔, 保留3位小数. 否则输出 -1

样例输入
1 -1 1 1 1 -1

样例输出
0.522

提示

来源
monkeyde17


思路 :

这个题     没有看出来到底是怎样的    只是感觉应该考的是二分法    所以就猜着试了下     把他当做单调递增函数去做    

#include<stdio.h>
#include<math.h>
int q,r,s,t,u,v;
double ans(double x)
{
return q*sin(x)+r*cos(x)+s*tan(x)+t*x*x+u*x+v;
}
int main()
{
double mid,x,start,end;
while(scanf("%d %d %d %d %d %d",&q,&r,&s,&t,&u,&v)!=EOF)
{
x=-1;
start=0;end=1;
while(end-start>0.000000001)//注意这里少了一个零就会错 要很小才行 有时候对精确度把握真心不好说 就记住这个吧 以后都用这个精确度
{
mid=(start+end)/2;
double t=ans(mid);
if(t<0.00001&&t>-0.000001)
{
x=mid;
break;
}
else if(t<0)
{
start=mid;
}
else end=mid;
}
if(x!=-1) printf("%.3lf\n",x);
else printf("-1\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: