ACM复习(54)17235 Minecraft是个好游戏

Description
Minecraft是一个颠覆性的高自由度游戏,其中文译名叫“我的世界”。之所以会有如此译名,原因在于这个游戏就像一个沙盒世界,玩家就像是个创世神一般。其颠覆性在于它不同于以往那些游戏“要你做
去什么”,相反的,是由玩家去思考“我要做什么”。
说了这么一段,你们是不是很想上网搜一搜怎么玩呢?不过玩之前麻烦先帮Lrc解决一个问题。
这个游戏里面是可以制作逻辑电路的,通过简单的搭建,玩家可以制作出一个简单的TNT大炮。
假设现在Lrc想使用大炮轰地面上炸距离自己s米处的目标,大炮的发射仰角为A(单位角度),炮弹的初速度为v米/秒,TNT在发出后t秒爆炸,爆炸半径为r米(当目标到爆炸点的距离<=r时即视为击中),
炸药落地后不反弹。重力加速度取10m/s^2。问:Lrc能否击中目标?PS:目标与Lrc于同一平面。

输入格式
输入包括5个实数,分别为s(s > 0),A(0 < A < 90),v(v > 0),t(t > 0),r(r > 0),之间用空格分割。

输出格式
输出一行,若能击中目标,输出“nice!”(不包含引号),否则输出“T^T”(不包含引号)。

输入样例
9 30 10 1 0.5

输出样例
nice!


解题思路

高中物理

#include <stdio.h>
#include <math.h>
int main()
{
    double s, a, v, t, r;
    double x1, x2, h2, t1, g=10, vx, vy;
    scanf("%lf %lf %lf %lf %lf", &s, &a, &v, &t, &r);

    // 水平速度和垂直速度 
    vx = v * cos(a * M_PI / 180);
    vy = v * sin(a * M_PI / 180);

    // 落地时间,按落地时间跑的水平距离,按爆炸时间跑的水平距离 
    t1 = 2 * vy / g;    
    x1 = vx * t1;  
    x2 = vx * t;

    // 还未落地就爆炸时的高度 
    h2 = vy * t - g * t * t / 2;

    // 落地前爆炸 
    if(t1 <= t)
    {
        if(fabs(x1 - s) <= r)
        {
            printf("nice!\n");
        }
        else
        {
            printf("T^T\n");
        }
    }
    else
    {
        if((x2 - s) * (x2 - s) + h2 * h2 <= r * r)
        {
            printf("nice!\n");
        }
        else
        {
            printf("T^T\n");
        }
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/sinat_34200786/article/details/81569670