牛客网练习赛28—E(斜抛运动 or 三分)

链接:https://www.nowcoder.com/acm/contest/200/E
来源:牛客网
(ps:三分解法看下一篇)

题目描述

女装会成瘾

由于某人的精心设计,小可爱掉入了女装的天坑无法自拔。

于是……她开始疯狂的成批的买女装。

而Kirito_Rivaille为了戒掉他的女装病,准备实施家暴——把小可爱的女装从窗户扔下去

他们家距离地面的高度为H,也就是说,女装都是从这了被抛出去的。

而由于Kirito_Rivaille体力有限,(女装也很沉),所以她抛出去的速度最大是v(最小是0);

之后呢,Kirito_Rivaille为了不让小可爱在下去捡到,于是想尽可能的抛的远一点。

所以现在他想找个合适的角度抛出。

作为Kirito_Rivaille身边的活宝,你的任务是帮助Kirito_Rivaille。

给出他们俩住的屋子的高度H和抛出速度v,请你找到一个合适的角度θ使得落地时距他们脚下的地面(H=0的位置)的直线距离最远。

然而小可爱并不关心这个角度是多少,只关心距离他们的直线距离是多少。

输出四舍五入保留五位小数,当你的答案与std的相对误差不超过0.00001时就算正确了。

说明:不考虑空气阻力,g取9.80665。

提示公式:

    x=vtcosθ,

    y=H+vtsinθ-0.5*gt2

其中t为飞行时间。

输入描述:

第一行一个正整数T

接下来T行每行两个实数H,v

输出描述:

T行每行一个数,保留五位小数。

题意:

求斜抛运动水平位移的最大值。

题解:

先回顾一下高中物理斜抛运动的两种情况:

1) 抛出点与落地点在同一水平面:

即: X_{max}=v_0^2/g

2) 抛出点与落地点不在同一水平面:

即:X_{max}= \frac{v_0\sqrt{v_0^2+2gh}}{g}

AC代码:

#include<iostream>
#include<cstdio>
#include<cmath>
#define g 9.80665
using namespace std;
int main()
{
    int t;
    double h,v;                  //必须用double
    cin>>t;
    while(t--)
    {
        cin>>h>>v;
        double ans = v*sqrt(v*v+2*g*h)/g;
        printf("%.5f\n",ans);
    }
    return 0;
}

 

猜你喜欢

转载自blog.csdn.net/qq_41157137/article/details/82954838
今日推荐