计算球的位置

计算球的位置

时间: 1ms        内存:64M

描述:

丁小辉准备参加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

提示:

参考答案(内存最优[748]):

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define MIN(a,b) a<b?a:b
int main(){
	int i,n,m,x,y,vx,vy,t;
	while(scanf("%d%d%d%d%d%d%d",&n,&m,&x,&y,&vx,&vy,&t)!=EOF){
		  while(t--){
  			    x+=vx;
  			    y+=vy;
	  	        if(x<0){
   			  	   x=-x;
   			  	   vx=-vx;
		        }
		        if(x>n){
       			   x=2*n-x;
       			   vx=-vx;
        		}
        		if(y<0){
	        	   y=-y;
	        	   vy=-vy;
		        }
		        if(y>m){
       			   y=2*m-y;
       			   vy=-vy;
        		}
  		  }
  		  printf("%d %d\n",x,y);
	}
}

参考答案(时间最优[0]):

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define MIN(a,b) a<b?a:b
int main(){
	int i,n,m,x,y,vx,vy,t;
	while(scanf("%d%d%d%d%d%d%d",&n,&m,&x,&y,&vx,&vy,&t)!=EOF){
		  while(t--){
  			    x+=vx;
  			    y+=vy;
	  	        if(x<0){
   			  	   x=-x;
   			  	   vx=-vx;
		        }
		        if(x>n){
       			   x=2*n-x;
       			   vx=-vx;
        		}
        		if(y<0){
	        	   y=-y;
	        	   vy=-vy;
		        }
		        if(y>m){
       			   y=2*m-y;
       			   vy=-vy;
        		}
  		  }
  		  printf("%d %d\n",x,y);
	}
}

题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。

点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注