题目:找试场
题目描述
小王同学在坐标系的(0,0)处,但是他找不到考试的试场,于是一边走路一边问路,每个被问路的人会告诉他一个指令(包括走路或转弯),现在请编一个程序,显示他每次走路后的坐标(转弯后不必显示坐标)。
数据范围
对于50 %的数据,0<n <=20,对于100 %的数据,0<n <=500, 所有数据都在longint范围内。
输入格式
第一行一个数n,表示有n个指令,接下来n行每行一个指令,每个指令是“left” 或“right”或数字。
输出格式
(有m个走路的指令)共m行,每一行一个坐标,表示走完后的坐标。如果只是原地转弯,从来不走动,则输出“(0,0)”.
题解:———————————————————————————————————————————————————
第一次做这样的题,看了别人的题解才明白,设定一个指示方向的变量,但向左转时step+3,向右转时step+1,向右转三次相当于向左转一次。
代码实现:
#include<iostream>
using namespace std;
int main()
{
int x,y,i,n;int b[501][2];
cin>>n;
x=y=0;
memset(b,-1,sizeof(b));
int step=0;
for(i=1;i<=n;i++)
{
char a[30];
cin>>a;
if(0<=a[0]-'0'&&a[0]-'0'<=9)
{
int k,j=0,l=1;
k=strlen(a);
while(k>0)
{
j=j+(a[k-1]-'0')*l;
l=l*10;
k--;
}
switch(step){
case 0:y=y+j;break;
case 1:x=x+j;break;
case 2:y=y-j;break;
case 3:x=x-j;break;
}
b[i][0]=x;b[i][1]=y;
}
else if(a[0]=='r') {step=step+1;step=step%4;}
else if(a[0]=='l') {step=step+3;step=step%4;}
}
bool p=0;
for(i=1;i<=n;i++)
if((b[i][0]!=0||b[i][1]!=0)&&b[i][0]!=-1)
p=1;
if(p==0) {cout<<"(0,0)"<<endl;return 0;}
for(i=1;i<=n;i++)
if(b[i][0]!=-1)
cout<<"("<<b[i][0]<<","<<b[i][1]<<")"<<endl;
return 0;
}
浙公网安备 33010602011771号