1088: 寻找考场
Time Limit: 1000MS Memory Limit: 65536KBTotal Submit: 61 Accepted: 20 Page View: 280
Submit Status Discuss
Description
小王同学在乐山一中考场的前门(0,0)处,面向正前方是一条宽阔的大道(坐标轴上看作y轴),但是他找不到考试的试场,于是一边走路一边问路,每个被问路的志愿者会告诉他一个指令(包括走路或转弯),现在请编一个程序,显示他每次走路后的坐标(转弯后不必显示坐标)。
Input
第一行一个数n,表示有n个指令 接下来n行每行一个指令,每个指令是“left” 或“right”或数字。
Output
(有m个走路的指令)共m行,每一行一个坐标,表示走完后的坐标。
如果只是原地转弯,从来不走动,则只输出“(0,0)”.!!
6 2 left 2 right right 3
(0,2) (-2,2) (1,2)
Hint
对于100 %的数据,0 < n <= 500, 所有数据都在longint/long long范围内.
Source
因为没注意到long long 的长度应该是差不多20位,所以一直WA。
#include <iostream>
#include<cstdio>
#include<string>
#define ll long long int
using namespace std;
int b[4][2]={0,1,-1,0,0,-1,1,0};
int main()
{
char q[50]; //定义这个的长度应大于20 ,之前定义的15,一直WA
int n,now[2];
string a;
while(~scanf("%d",&n))
{
ll x=0,y=0;
int t=0,foot=0;
for(int i=0;i<n;i++)
{
scanf("%s",q); string型的不能直接用scanf输入,所以先输入char型的再转换,因为队长说不能用
a=q;
if(a=="left")
{
if(t==3) t=0;
else t++;
now[0]=b[t][0];
now[1]=b[t][1];
}
else if(a=="right")
{
if(t==0) t=3;
else t--;
now[0]=b[t][0];
now[1]=b[t][1];
}
else
{
ll num=0;
now[0]=b[t][0];
now[1]=b[t][1];
int len=a.size();
for(int j=0;j<len;j++)
{
num=a[j]-'0'+num*10;
}
x+=now[0]*num;
y+=now[1]*num;
printf("(%lld,%lld)\n",x,y);
foot++;
}
}
if(foot==0)
printf("(%lld,%lld)\n",x,y);
}
return 0;
}