最近又刷到一题,模拟比较有意思,所以拉出来说一下,上题目:
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代码
#includeusing 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< 欢迎分享,转载请注明来源:内存溢出
评论列表(0条)