Dream To Me

总有些什么留下来并被惦记

练习,找试场


找试场


描述

小王同学在坐标系的(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)



思路:

  我没觉得哪儿错了,可惜给我判一个点没过,结果是超时,问了下是那个点的数据多个空行,奇怪了,程序是边输入边输出的。这个题我觉得就读取输入数据那个地方处理麻烦一些,其它的都不是很大的问题。我的方法是无论是什么都当字符串读进来,然后判断是不是转向的命令,不是的话就肯定是前进,那么用库函数格式化读取字符串的内容赋给变量。变量news记录了当前所面对的方向。由于转向的话check返回的值是-1,所以只要&gt;=0的返回值都是前进的步数。x,y默认在原点,所以不会出现让走0步而没有输出结果的情况,感觉程序挺严谨的。CX说超时是我程序的问题,没有哪儿能让程序超时啊,若是C++的流的问题那为什么改成C的库函数还是那个点挂了呢?还是数据有问题的吧~说改成最后输出结果也不难,加个数组的啦~

  发现要是困了挺过那一阵,基本就精神了。。。




Code:

/*
y正半轴:1
x负半轴:2
y负半轴:3
x正半轴:4
*/
#include <iostream>
using namespace std;
int news=1,x=0,y=0;
char p1[]="left";
char p2[]="right";
int check(char *p)
{
  int num;
  if(!strcmp(p,p1))
    if(news==4)
     news=1;
    else
     news++;
  else if(!strcmp(p,p2))
    if(news==1)
     news=4;
    else
     news--;
  else
    {
     sscanf(p,"%d",&num);//格式化读取字符串p的内容到整型变量num
     return num;//不转弯
    }
  return -1;//转弯 
}
void cope(int step)
{
   if(news==1)
    y+=step;
   if(news==2)
    x-=step;
   if(news==3)
    y-=step;
   if(news==4)
    x+=step;
   cout<<"("<<x<<","<<y<<")"<<endl;
}
int main()
{
  int n,i;
  char p[]="2147483648";
  cin>>n;
  for(i=0;i<n;i++)
    {
    cin>>p;
    if(check(p)>=0)
      cope(check(p));
    } 
  return 0;
}