汽车拐弯--三分法的应用1005

该博客讨论了汽车在给定X, Y, l, d条件下能否成功拐弯的问题。通过分析角度θ对最大高度h的影响,指出h呈凸性函数特性,适合使用三分法求解。文中涉及关键公式及代码实现。" 115799821,10622267,Flink知识体系详解:从基础到高可用集群,"['大数据', 'Flink', '分布式计算', 'Hadoop', '集群部署']

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

 题目叙述:
Mr. West bought a new car! So he is travelling around the city.<br><br>One day he comes to a vertical corner. The street he is currently in has a width x, the street he wants to turn to has a width y. The car has a length l and a width d.<br><br>Can Mr. West go across the corner?<br><img src=../../../data/images/2438-1.jpg><br>
 

Input
Every line has four real numbers, x, y, l and w.<br>Proceed to the end of file.<br>
 

Output
If he can go across the corner, print "yes". Print "no" otherwise.<br>
 

Sample Input
10 6 13.5 4<br>10 6 14.5 4<br>
 

Sample Output
yes<br>no<br>
解题思路:

汽车拐弯问题,给定X, Y, l, d判断是否能够拐弯。首先当X或者Y小于d,那么一定不能。 其次我们发现随着角度θ的增大,最大高度h先增长后减小,即为凸性函数,可以用三分法来求解。 这里的Cal函数需要比较繁琐的推倒公式: s = l * cos(θ) + w * sin(θ) - x; h = s * tan(θ) + w * cos(θ); 其中s为汽车最右边的点离拐角的水平距离, h为里拐点最高的距离, θ范围从090

代码:

#include<iostream>
#include<cmath>
#include<iomanip>
using namespace std;
double x,y,l,w,s,h;
double pi=acos(-1.0);
double cal(double a)
{
 s = l*cos(a)+w*sin(a)-x;
    h = s*tan(a)+w*cos(a);
    return h;
}
int main()
{
 double left,right,mid,mmid;
 while(cin>>x>>y>>l>>w)
 {
  left=0.0;
  right=pi/2;
  while(fabs(left-right)>1e-8)

  { 
   mid=(left+right)/2;
      mmid=(mid+right)/2;
   if(cal(mid)>cal(mmid))  right=mmid;
   else   left=mid;

        }
  double max=(cal(mid));
  if(cal(mid)<cal(mmid))  max=cal(mmid);
  if(max<=y)  cout<<"yes"<<endl;
  else cout<<"no"<<endl;
 }
 return 0;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值