17235 Minecraft是个好游戏
时间限制:1000MS 内存限制:65535K
提交次数:50 通过次数:16 收入:25
题型: 编程题 语言: C++;C
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!
来源
lyric_seraph作者
201131001114
思路:本题分两种情况,一是落地时过一段时间爆炸;而是在飞行过程中爆炸,但仍有可能炸到目标。
根据物理求出水平速度、垂直速度、飞行时间,以爆炸中心为圆点,求圆点和目标的距离是否小于半径。
代码
#include <stdio.h>
#include <math.h>
int main()
{
// freopen("input.txt","r",stdin);
// freopen("output.txt","w",stdout);
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;//落地爆炸时,水平飞行距离
h2=vy*t-g*t*t/2;
x2=vx*t;//空中爆炸时,水平飞行距离
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;
}