青少年编程Playgrounds之十九--算法

本文介绍了青少年编程课程中的算法应用,通过解决迷宫和开关路径问题来讲解编程思维。作者展示了如何使用导航算法避开障碍物,并在遇到开关时调整路径。在第四关中,通过分析发现更优的转向策略,减少了无谓的弯路,进一步优化了算法。

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

青少年编程Playgrounds之十九–算法

第三关 征服迷宫

在这里插入图片描述

在这里插入图片描述

有了上一关的基础,本关就很简单了,首先,导航算法移过来

func navigateAroundWall() {
    if isBlockedRight {
        if isBlocked{
            turnLeft()
        }else {
            moveForward()
        }
        
    }  else {
        turnRight()
        moveForward()
    }
}

现在脑海里过一遍,看看这个算法能否满足本关需求。
答案是----------------我算不过来
然后循环出场,找到循环条件,放眼整个地图,就只有宝石最耀眼,那么就是它了。!isOnGem
嗯,没了

while  !isOnGem {
    navigateAroundWall()
}
collectGem()

运行程序
在这里插入图片描述

虽然走了点弯路,但还是完成了任务。

那么有人说了(其实没人说,貌似也没人在看),如果不走弯路怎么搞?
嗯,广度或者深度算法可以实现,只是这个需要用到变量,数组等等东西,那是 学习编程2 里会学到的东西,到时候再来吧。

第四关 左转还是右转

在这里插入图片描述

先在脑海中走一遍Byte过关路线,发现,嗯,咳咳,可能可以完全使用之前的导航算法,所以毫不犹豫移动代码到本关

func navigateAroundWall() {
    if isBlockedRight{
        if isBlocked{
            turnLeft()
            
        }else {
            moveForward()
        }
    }else{
        turnRight()
        moveForward()
    }
}

然后循环条件,也和上一关一样,我的天,
继续只做搬运工

while  !isOnGem {
    navigateAroundWall()
}
collectGem()

然后发现不对,本关地图多了开关,这也难不倒我们

while !isOnGem {
    navigateAroundWall()
    if isOnClosedSwitch{
        toggleSwitch()
    }
    
}
collectGem()

运行…
在这里插入图片描述
在这里插入图片描述

虽然过关了,不过由截图可知,走了一些弯路。

为啥呢,因为本关并不是如之前两关一样是测试右手法则,而是想我们每次遇到开关时判断方向。所以如果不用导航算法,怎么操作呢?
首先,找到开关的特点,每次遇到开关必定需要转向,往哪个方向转呢?
其实仔细分析,很快发现,每当前方受阻时,必左转,否则右转,所以,写一个转向函数

func whichDirctionToTurn(){
    if !isBlocked{
        turnRight()
    }else{
        turnLeft()
    }
}

然后循环

while !isOnGem {
    moveForward()
    
    if isOnClosedSwitch{
        toggleSwitch()
        //搜集到宝石后,判断旋转方向
        whichDirctionToTurn()
    }
}
collectGem()

已经不需要导航函数了
快速运行
妈妈再也不用担心Byte乱跑了
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值