您的位置:首页 > 编程语言

墙角转弯

2016-04-29 20:10 246 查看
题意:给定转弯路段两条路的的宽度x,y和西先生的车的长和宽,判断西先生的车是否能成功转弯。

思路:画一个草图,用两条路的外墙做横纵坐标,两墙的交点作为原点,让车尽量沿着外墙走,判断车身是否和内墙相撞,用三分法解题。

感悟:好题,锻炼思维能力,怎样建坐标系比较简单很重要。

AC代码:

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;
const double PI =acos(-1.0);
double f (double x,double l,double w,double a){
return(-a+l*sin(x)+w/cos(x))/tan(x);
//-tan(x)+l*sin(x)+w/cos(x);
}
int main()
{
double a,b,l,w,r,left,m,mm;
while (cin>>a>>b>>l>>w)
{
left=0;
r=PI/2;
m=PI/4;mm=3*PI/8;
while (r-left>0.000001)
{
//m=(left+r)/2;
// mm=(m+r)/2;
m=(r+2*left)/3;
mm=(left+r*2)/3;
if (f(m,l,w,a)>f(mm,l,w,a))
r=mm;
else
left=m;

}
if (f(m,l,w,a)<=b)
cout<<"yes"<<endl;
else
cout<<"no"<<endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  编程