平面移动乌龟(原创c++模拟)

平面移动乌龟(原创c++模拟),第1张

平面移动乌龟(原创c++模拟)

最近又刷到一题,模拟比较有意思,所以拉出来说一下,上题目:

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)。

输入格式 输入文件名:p.in

第一行一个正整数m(10<=m<=100),表示测试数据的组数。每组测试数据第一行是一个正整数n(1<=n<=10000)表示小乌龟行走的次数,下面n行每行输入一次相对行走,格式如上所述,其中( 1 <= x <= 10000为正整数)。并且小乌龟走完每组数据后会自动回到初始点回到原始状态,等待执行下一组数据。

输出格式 输出文件名:p.out

对于每组输入数据输出一行,x y p, 中间用空格隔开,x y 是小乌龟停下位置的绝对坐标,p是小乌龟头朝向的绝对方向编号(0<=p <=3)。

输入/输出例子1

输入:

1

4

left 10

right 11

forward 12

back 13

输出:

-10 10 3

 提前说一下,这一题是if,else 大集合,当然你也可以用swich_case来做。不多说,上AC代码

#include
using namespace std;
int t;
int main(){
	cin>>t;
	string s;
	while(t--){
		int n,x=0,y=0,p=1;
		cin>>n;
		for(int i=0;i>s>>z;
			if(s=="left"){
				if(p==0) p=1;
				else if(p==1)
					p=2;
				else if(p==2)
					p=3;
				else if(p==3)
					p=0;
				if(p==0) x+=z;
				else if(p==1)
					y+=z;
				else if(p==2)
					x-=z;
				else if(p==3)
					y-=z;
			}
			if(s=="forward"){
				if(p==0) x+=z;
				else if(p==1)
					y+=z;
				else if(p==2)
					x-=z;
				else if(p==3)
					y-=z;
			}
			if(s=="right"){
				if(p==0) p=3;
				else if(p==1)
					p=0;
				else if(p==2)
					p=1;
				else if(p==3)
					p=2;
				if(p==0)
					x+=z;
				else if(p==1)
					y+=z;
				else if(p==2)
					x-=z;
				else if(p==3)
					y-=z;
			}
			if(s=="back"){
				if(p==0) p=2;
				else if(p==1)
					p=3;
				else if(p==2)
					p=0;
				else if(p==3)
					p=1;
				if(p==0)
					x+=z;
				else if(p==1)
					y+=z;
				else if(p==2)
					x-=z;
				else if(p==3)
					y-=z;
			}
		}
		cout< 

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5657800.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存