题目
LOGO语言中有一只可爱的小乌龟可以前后左右移动,在C语言中也有一个可爱的小乌龟。小乌龟的起始位置称为原点,小乌龟初始时头朝上方,状态如下图所示,我们规定它初始的面朝方向为y轴正方向,尾巴方向为y轴负方向,左右分别为x轴负方向和正方向。
现在以0,1分别代表x,y轴正方向,2,3分别代表x,y轴负方向,它们是绝对方向。而小乌龟只会沿着与绝对方向xy轴平行的方向行走,但是小乌龟不知道自己现在走到哪了,不知道自己在xy平面坐标系中的绝对坐标和自己头朝向的绝对方向。
小乌龟有以下四种移动方式,每种移动方式先给出一组字符代表移动方式,之后是一个空格隔开的x,代表移动x米。
forward x 向前走x米。
back x 调转方向向后,再走x米。
left x 调转方向向左,再走x米。
right x 调转方向向右,再走x米。
输入格式
第一行一个正整数m(10<=m<=100),表示测试数据的组数。每组测试数据第一行是一个正整数n(1<=n<=10000)表示小乌龟行走的次数,下面n行每行输入一次相对行走,格式如上所述,其中( 1 <= x <= 10000为正整数)。并且小乌龟走完每组数据后会自动回到初始点回到原始状态,等待执行下一组数据。
输出格式
对于每组输入数据输出一行,x y p, 中间用空格隔开,x y 是小乌龟停下位置的绝对坐标,p是小乌龟头朝向的绝对方向编号(0<=p <=3)。
输入格式
第一行一个正整数m(10<=m<=100),表示测试数据的组数。每组测试数据第一行是一个正整数n(1<=n<=10000)表示小乌龟行走的次数,下面n行每行输入一次相对行走,格式如上所述,其中( 1 <= x <= 10000为正整数)。并且小乌龟走完每组数据后会自动回到初始点回到原始状态,等待执行下一组数据。
输出格式
对于每组输入数据输出一行,x y p, 中间用空格隔开,x y 是小乌龟停下位置的绝对坐标,p是小乌龟头朝向的绝对方向编号(0<=p <=3)。
输入/输出例子
输入:
1
4
left 10
right 11
forward 12
back 13
输出:
-10 10 3
正如题目所说
我们要输出小海龟的坐标,和区域。
像这些命令,都要用string类型存起来,然后将读进去的数与其比较,构建平面直角坐标系,从而得出答案。
#include<bits/stdc++.h>
using namespace std;
int main(){
//freopen("p.in","r",stdin);
//freopen("p.out","w",stdout);
int m;
scanf ("%d",&m);
while (m--){//多组数据
int n;
scanf ("%d",&n);
int x=0,y=0,f=1;
for (int i=0;i<n;i++){
string a;int s;
cin>>a>>s;
if (a=="back") f=(f+2)%4;//预处理,也是方向
if (a=="left") f=(f+1)%4;
if (a=="right") f=(f-1+4)%4;
switch (f){ //代码关键句模拟
case 1:{y+=s;break;}
case 3:{y-=s;break;}
case 2:{x-=s;break;}
case 0:{x+=s;break;}
}
}
printf ("%d %d %d",x,y,f);
}
return 0;
}
我感觉也没有什么特别难的,主要还是方向区域的判断。