平面移动乌龟

这篇博客讨论了如何在C语言中模拟LOGO语言中的小乌龟移动,包括前进、后退、左转和右转四种操作,并介绍了输入输出格式及示例。文章强调了坐标和方向判断在解决问题中的关键作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目

LOGO语言中有一只可爱的小乌龟可以前后左右移动,在C语言中也有一个可爱的小乌龟。小乌龟的起始位置称为原点,小乌龟初始时头朝上方,状态如下图所示,我们规定它初始的面朝方向为y轴正方向,尾巴方向为y轴负方向,左右分别为x轴负方向和正方向。

图片1.png

现在以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;
}

我感觉也没有什么特别难的,主要还是方向区域的判断。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值