宁波工程学院 1346 二分

本文介绍了一种通过二分查找法来求解一个特定形式的方程在[0,1]区间内所有实数解的方法。该方程的形式为q*sin(x)+r*cos(x)+s*tan(x)+t*x*x+v+u*x,在限定条件下,采用C++编程实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

http://ac.nbutoj.com/Problem/view.xhtml?id=1346

  • 问题描述
  • 老虎想和兔子玩, 所以老虎一直追着兔子, 兔子觉着老虎很笨, 就一直躲着老虎.
    有天, 兔子躲烦了. 停下来对老虎说 : "我最近对一个问题感到十分的困惑, 如果你能帮我解决我的问题, 我就不躲着你了."
    有一个方程, 如下所示.

    其中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
#include <stdio.h>
#include <iostream>
#include <cmath>
using namespace std;
int q,r,s,v,t,u,x;
double root(double x)
{
    return q*sin(x)+r*cos(x)+s*tan(x)+t*x*x+v+u*x;
}
int main()
{
   while(~scanf("%d%d%d%d%d%d",&q,&r,&s,&t,&u,&v))
   {
       x=-1;
       double left=0;
       double right=1;
       double mid;
       while(left<right)
       {
           mid=(left+right)/2;
           double t=root(mid);
           if(t<0.0001&&t>-0.0001)
           {
                x=mid;
                break;
           }
           else if(t<0)
              left=mid;
           else
              right=mid;
       }
       if(x!=-1)
         printf("%.3f\n",mid);
       else
         printf("-1\n");
   }
   return 0;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值