您的位置:首页 > 其它

练习二 1004 射箭问题

2016-04-20 21:28 183 查看
简单题意:

    给出所射物体的坐标,和箭的速度,有阻力,计算出箭的角度,如果到不了的话就输出-1.。

思路:

     此题要运用一点物理知识,将速度分为x轴和y轴的方向。x轴方向计算所需时间,y轴计算并判断。之后运用二分法,将角度设为变量,上限为π/2,下限为0;

代码如下:

#include <iostream>
#include <cmath>
#include<iomanip>
using namespace std;
int main()
{
const double pi=3.141592653589;
int n;
double x,y,v;
double max,min,M;
double a,b;
double t,h;
cin>>n;
while(n--)
{
max=pi/2;
min=0;

cin>>x>>y>>v;
while(max-min>=1e-8)
{
M=(max+min)/2;
a=v*cos(M);
b=v*sin(M);
t=x/a;
h=b*t-9.8/2*t*t;
if(h>=y)
max=M;
else
min=M;
}
if(M<1e-8||pi/2-M<1e-8)
cout<<"-1"<<endl;
else
cout<<fixed<<setprecision(6)<<(max+min)/2<<endl;
}

}

感想:

     看来对于问题的分析,需要考虑很多方面的知识啊,就像这个题,不会物理,白搭。

ACID:00755009 


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: