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

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;
    }




  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值