2361: 计算球的位置
时间限制: 1 Sec 内存限制: 64 MB
提交: 219 解决: 65
[提交][状态][讨论版][命题人:外部导入]
题目描述
丁小辉准备参加YT大学首届斯诺克比赛,但是他发现自己击中目标有问题。教练说:你必须在任何时刻知道球的位置,而球的位置是由击球的速度和时间决定的。那么,给定初始位置和初始速度,经过 t 时间后,球会落到台面的哪个点呢?
为简单起见,假定台面是一个矩形,矩形的左上角坐标是 (0,0), 右下角坐标是 (n,m)。现在有一个小球在矩形内部的 (x0,y0) 点,他的初始速度用 x 方向速度和 y 方向速度给出,分别用 xv,yv 来代表。现在需要知道小球在 t 时间后的坐标。已知小球碰到矩形边界会发生完全弹性碰撞。注意:我们假设小球滚动的速度是恒定不变的。
输入
多组测试样例。
第一行输入两个数 n 和 m。(10<=n,m<=500)
第二行输入小球坐标 x0,y0。(1<=x0<=n,1<=y0<=m)
第三行给出小球横纵向速度 xv,yv。(0<=xv<=n,0<=yv<=m)
第四行输入一个时间 t。(1<=t<=1000)
所有输入均为正整数。
输出
两个数,分别代表 x 坐标和 y 坐标
样例输入
10 10 1 1 4 6 3
样例输出
7 1
提示
小球在碰到角落时原路返回。
#include<stdio.h>
int main()
{
int x,y,n,m,x0,y0,xv,yv,t;
while(scanf("%d%d%d%d%d%d%d",&n,&m,&x0,&y0,&xv,&yv,&t)!=EOF)
{
x=x0+xv*t;
y=y0+yv*t;
while(x>n||x<0)
{
if(x>n)
x=n-(x-n);
else
x=-x;
}
while(y>m||y<0)
{
if(y>m)
y=m-(y-m);
else
y=-y;
}
printf("%d %d\n",x,y);
}
return 0;
}