标签:
问题描述 :
输入:
输出:
样例输入:
4
E 1 1
W 1 1
2
4
E 1 1
W 2 1
5
4
E 2 2
W 3 1
5
0
样例输出:
2 2 3 3 2 1 2 4 3 1 4 1
题目大意:(1)、输入的第一行是n(以n等于0为结束),表示给定一个n*n的范围,最初将两只兔子放在(1,1)和(n,n)的位置。
(2)、第二行分别输入第一只兔子的前进方向,速度(每个小时走过的格子数),经过多少个现实向左转一次;
(3)、第三行输入的是第二只兔子的信息,输入内容和第一只兔子一致;
(4)、第四行输入一个时间,我们要求的就是经过这么的时间后,两只兔子的位置,注意如果两只兔子相撞了,那么他们就交换彼此的方向。
(6)、注意:1、兔子撞墙后就会反转方向,
2、两只兔子相撞后,会交换各自的方向;
3、每隔固定的时间t,兔子就需要向左转换一次方向;
4、如果相撞和左转同时发生,我们就优先考虑相撞的影响
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 using namespace std; 5 int n; 6 void fun(int &x,int &y,int v,char &d) 7 { 8 if(d==‘E‘) x=x+v; 9 if(d==‘W‘) x=x-v; 10 if(d==‘N‘) y=y-v; 11 if(d==‘S‘) y=y+v; 12 if(x>n){ d=‘W‘;x=2*n-x;} 13 if(x<1) { d=‘E‘;x=2-x;} 14 if(y>n) {d=‘N‘;y=2*n-y;} 15 if(y<1) {d=‘S‘;y=2-y;} 16 } 17 void change(char &d) 18 { 19 if(d==‘E‘) 20 d=‘N‘; 21 else 22 { 23 if(d==‘W‘) 24 d=‘S‘; 25 else 26 { 27 if(d==‘N‘) 28 d=‘W‘; 29 else 30 d=‘E‘; 31 } 32 } 33 } 34 int main() 35 { 36 int v1,v2,t1,t2,time,x1,x2,y1,y2; 37 char d1,d2,temp; 38 while(scanf("%d",&n)&&n) 39 { 40 getchar(); 41 scanf("%c %d %d",&d1,&v1,&t1); 42 getchar(); 43 scanf("%c %d %d",&d2,&v2,&t2); 44 cin>>time; 45 x1=y1=1; 46 x2=y2=n; 47 for(int i=1;i<=time;i++) 48 { 49 fun(x1,y1,v1,d1); 50 fun(x2,y2,v2,d2); 51 if(x1==x2&&y1==y2) 52 { 53 temp=d1; 54 d1=d2; 55 d2=temp; 56 } 57 else 58 { 59 if(i%t1==0) 60 change(d1); 61 if(i%t2==0) 62 change(d2); 63 } 64 } 65 cout<<y1<<" "<<x1<<endl; 66 cout<<y2<<" "<<x2<<endl; 67 } 68 }
标签:
原文地址:http://www.cnblogs.com/xinxiangqing/p/5021222.html