题目:找试场

题目描述

小王同学在坐标系的(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;
    
    }
posted on 2011-12-28 19:27  怡红公子  阅读(491)  评论(0编辑  收藏  举报