「RQNOJ107」找试场
题目描述
小王同学在坐标系的(0,0)处,但是他找不到考试的试场,于是一边走路一边问路,每个被问路的人会告诉他一个指令(包括走路或转弯),现在请编一个程序,显示他每次走路后的坐标(转弯后不必显示坐标)。
数据范围
对于50 %的数据,0<n <=20,对于100 %的数据,0<n <=500, 所有数据都在longint范围内。
输入格式第一行一个数n,表示有n个指令,接下来n行每行一个指令,每个指令是“left” 或“right”或数字。
输出格式(有m个走路的指令)共m行,每一行一个坐标,表示走完后的坐标。如果只是原地转弯,从来不走动,则输出“(0,0)”.
样例输入
6
2
left
2
right
right
3
样例输出
(0,2)
(-2,2)
(1,2)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
#include<iostream> #include<cstdio> #include<cstring> #include<string> using namespace std; int n; int x=0,y=0; int k=0;//0向上,1向右,2向下,3向左 void work(int s) { if(k==0)y+=s; if(k==1)x+=s; if(k==2)y-=s; if(k==3)x-=s; printf("(%d,%d)\n",x,y); } void lt() { k--; if(k==-1)k=3; } void rt() { k++; if(k==4)k=0; } int getint(string p) { int num=0; for(int i=0;i<p.length();i++) { num=num*10+int(p[i]-'0'); } return num; } int main() { cin>>n; int flag=0; string p; for(int i=1;i<=n;i++) { cin>>p; if(p=="left")lt(); else if(p=="right")rt(); else {work(getint(p));flag=1;} } if(flag==0)printf("(%d,%d)\n",x,y); return 0; } |
Subscribe