练习,找试场
找试场
描述
小王同学在坐标系的(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,所以只要>=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;
}