c语言小题目(台球碰撞)。。。2014.5.24

1009: 台球碰撞

Time Limit: 1 Sec   Memory Limit: 128 MB
Submit: 84   Solved: 24
[ Submit][ Status][ BBS]

Description

在平面直角坐标系下,台球桌是一个左下角在(0,0),右上角在(L,W)的矩形。有一个球心在(x,y),半径为R的圆形母球放在台球桌上(整个球都在台球桌内)。受撞击后,球沿极角为a的射线(即:x正半轴逆时针旋转到此射线的角度为a)飞出,每次碰到球桌时均发生完全弹性碰撞(球的速率不变,反射角等于入射角)。

如果球的速率为v,s个时间单位之后球心在什么地方?

Input

输入文件最多包含25组测试数据,每个数据仅一行,包含8个正整数L,W,x,y,R,a,v,s(100<=L,W<=105, 1<=R<=5, R<=x<=L-R, R<=y<=W-R, 0<=a<360, 1<=v,s<=108),含义见题目描述。L=W=x=y=R=a=v=s=0表示输入结束,你的程序不应当处理这一行。

Output

对于每组数据,输出仅一行,包含两个实数x, y,表明球心坐标为(x,y)。x和y应四舍五入保留两位小数。

Sample Input

100 100 80 10 5 90 2 23110 100 70 10 5 180 1 99990 0 0 0 0 0 0 0

Sample Output

80.00 56.0071.00 10.00

HINT

Source

湖南省第六届大学生计算机程序设计竞赛

/*文件名:billiard_collision.c*/
#include 
#include 
#include 
int main()
{
	int A[25][8];
	int i=0,j,Column;
	int L,W,x,y,R,a,v,s;
	int V_y,s_y,location_y,buffer_y;
	int times_y;
	int V_x,s_x,location_x,buffer_x;
	int times_x;

   for(i=0;i<25;i++)
   {
		for(j=0;j<8;j++)
		{
			scanf("%f",&A[i][j]);
		}
		if(A[i][0]==0)
			break;
   }
	Column=i;
	/*
	for (i=0;i=0)
	   {
          s_y=V_y*s;//路程
		  if(s_y<=W-R-y)
			  location_y=y+s_y;
		  else
		  {
			  buffer_y=(s_y-W+R+y)%(W-2*R);
			  times_y=(s_y-buffer_y-(W-R-y))/(W-2*R);
			  if(times_y%2==0)
				  location_y=buffer_y+R;
			  else
				  location_y=W-R-buffer_y;
		  }
	   }
	   else
	   {
		   s_y=abs(V_y)*s;
		   if(s_y<=y-R)
			   location_y=y-s_y;
		   else
		   {
			   buffer_y=(s_y-y+R)%(W-2*R);
			   times_y=(s_y-buffer_y-y+R)/(W-2*R);
			   if(times_y%2==0)
				   location_y=buffer_y+R;
			   else
				   location_y=W-R-buffer_y;
		   }
	   }
//计算沿x轴方向
       	  
      V_x=(int)cos(a)*v;
	  if(V_x>=0)
	  {
		  s_x=V_x*s;
		  if(s_x<=L-x-R)
			  location_x=s_x+x;
		  else
		  {
			  buffer_x=(s_x-(L-x-R))%(L-2*R);
			  times_x=(s_x-(L-x-R)-buffer_x)/(L-2*R);
			  if(times_x%2==0)
				  location_x=L-R-buffer_x;
			  else
				  location_x=R+buffer_x;
		  }
	  }
	  else
	  {
		  s_x=abs(V_x)*s;
		  if(s_x<=x-R)
			  location_x=x-s_x;
		  else
		  {
			  buffer_x=(s_x-(x-R))%(L-2*R);
			  times_x=(s_x-(x-R)-buffer_x)/(L-2*R);
			  if(times_x%2==0)
				  location_x=R+buffer_x;
			  else
				  location_x=L-R-buffer_x;
		  }
	  }

   }
   printf("%d %d \n",location_x,location_y);

	return 0;

}


你可能感兴趣的:(C)