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

第一关 右手定则

先看地图,多次 运行我的代码 后,能发现,地图上的障碍物(Block)是随机变化的,那么肯定不能编写固定的代码。而本关的提示里已经非常详细的使用伪代码完成了算法编写。只要稍微修改一下真正的代码,使其和伪代码一致即可。
首先分析一下导航部分的代码,也就是Byte寻找路径的方式,即本关标题所说的右手法则。就是说只要右手边没有阻拦,那么就右转,如果有阻拦,则直行。
由于本关地图的特殊性,这样就可以了,但是实际情况会复杂一下,后面的关卡会遇到。

导航部分程序已经自动完成,我们只需要完成while循环部分即可。

根据伪代码,循环中需判断是否有宝石,如果有,则搜集宝石,然后转向。
那么很简单可写出

while !isOnGem {navigateAroundWall()//有宝石吗?if isOnGem{//搜集宝石collectGem()//转向//左转右转随意,反正转两次。就出现一次,所以不单独写转向函数了turnLeft()turnLeft()}
}

运行程序,一看,一个算法完成了。就是这么任性。
如果你像我一样蜜汁自信,请最高速运行。
然后…

Byte数次想不开想要飞翔…
千万不要太自信。
如果看不出失败的原因的话,单步运行一下就会发现,我们的退出条件有问题。我们设定的是当没有站在有宝石的方块上时,一直循环,而导航函数设定的是右转不行则直行,而完全没有考虑前方没有路的情况。所以导致现在Byte只能跳崖。
话说,条件是程序自己给的,所以我都没仔细看,所以完美入坑了,以后这样的坑还不少,得当心。其实只要根据伪代码修改退出条件即可,即 未站在未打开之开关上(我的描述相当言简意赅)。
代码

while !isOnClosedSwitch {navigateAroundWall()//有宝石吗?if isOnGem{//搜集宝石collectGem()//转向//左转右转随意,反正转两次。就出现一次,所以不单独写转向函数了turnLeft()turnLeft()}
}
toggleSwitch()

勇敢的 最快速运行

导航算法先不动,本关地图没有修改的必要,改了也没啥帮助。
下一关▶️

第二关 调整算法

当看到题目给出的while循环代码的时候,我简直怀疑这个软件直接提取了我上一关的代码,别的不说,帅气转身方向惊人一致。

青少年编程Playgrounds之十八--算法相关推荐

  1. 青少年编程Playgrounds之二十--算法

    青少年编程Playgrounds之二十–算法 第五关 向左走,向右走 本关是本章也是学习编程1的最后一关. 感慨良多,对比一下第一关,这还是同一个学习编程吗?走到这里,想来也对编程有了一定的了解,逻辑 ...

  2. CSDN 编程竞赛二十八期题解

    竞赛总览 CSDN 编程竞赛二十八期:比赛详情 (csdn.net) 本期竞赛的题目都很简单,但是非常考验读题和编码速度.这一次没有遇到bug,竞赛体验较好. 竞赛题解 题目1.小Q的鲜榨柠檬汁 团建 ...

  3. C语言编程>第十八周 ⑧ 给定程序中,函数fun的功能是:将形参指针所指结构体数组中的三个元素按num成员进行升序排列。

    例题:给定程序中,函数fun的功能是:将形参指针所指结构体数组中的三个元素按num成员进行升序排列. 注意:请勿改动主函数main与其他函数中的任何内容,仅在横线上填写所需的若干表达式或语句. 代码如 ...

  4. 《windows核心编程系列》十八谈谈windows钩子

    windows应用程序是基于消息驱动的.各种应用程序对各种消息作出响应从而实现各种功能. windows钩子是windows消息处理机制的一个监视点,通过安装钩子能够达到监视指定窗体某种类型的消息的功 ...

  5. C语言编程时常犯十八个错误

    转自:http://see.xidian.edu.cn/cpp/html/1140.html C语言的最大特点是:功能强.使用方便灵活. C编译的程序对语法检查并不象其它高级语言那么严格,这就给编程人 ...

  6. C#编程(四十八)----------列表

    C#中的List C#中deList怎么样?List<T>类是ArrayList类的泛型等效类,该类使用大小可按需动态增长的数组实现List<T>泛型接口. 泛型的好处:它为使 ...

  7. C语言编程>第二十八周 ① 多功能进制转换器设计

    多功能进制转换器设计 这两天花时间用C语言编写了一个多功能进制转换器,可以实现十进制数到二进制数的转换.十进制数到八进制数的转换.十进制数到十六进制数的转换.二进制数到八进制数的转换.二进制数到十进制 ...

  8. 嵌入式Linux系统编程学习之十八进程间通信(IPC)简介

      Linux 下的进程通信手段基本上是从 UNIX 平台上的进程通信手段继承而来的.而对 UNIX 发展做出过重大贡献的两大主力 -- AT&T 的贝尔实验室和 BSD (加州大学伯克利分校 ...

  9. CUDA C编程(三十八)CUDA调试

    这部分内容主要是介绍一些专门为CUDA应用程序设计的调试工具和方法.设计这些工具和方法的目的是让我们可以在代码运行的时候检查应用程序.接下来,代码检查将被分成两个独立但是相关的部分,分别是内核调试和内 ...

最新文章

  1. 显示一个顶层的提示信息
  2. 2020新款笔记本送一台!4核+8G+512固态
  3. SQL中的Exist操作
  4. 131125 - 关于对“一次元”、“二次元”、“三次元”的兴趣变化的奇思妙想
  5. Java基础学习总结(21)——常用正则表达式列表
  6. layoutSubviews 与 drawRect
  7. TreeView和Menu
  8. vue-cli+webpack在生成的项目中使用bootstrap的方法
  9. java sencha_开始使用Sencha Cmd
  10. Java 虚拟机简介
  11. Mac上qmc0文件转码为mp3
  12. 开发日记(01) - uni-app 使用等宽字体对齐数字宽度
  13. 原型设计工具——axure认识与使用
  14. methods: 68368 65536
  15. c语言分离个位十位百位_C语言中 将一个3位数整数,正确分离出它的个位、十位和百位数字,并分别在屏幕上输出...
  16. [PS业务知识]BCWS、BCWP、ACWP的理解
  17. 找论文的几个实用网站
  18. 简直太猛了!GitHub《植物大战僵尸》重磅开源,两天就破千Star!
  19. C#网络编程(同步传输字符串)
  20. 轨道交通计算机网络技术,城市轨道交通列车网络控制技术

热门文章

  1. 如何用PHP写webshell,phpAdmin写webshell的方法
  2. 高通4G全网通骁龙410系列-MSM8916(M9+) ( Cortex-A53架构)
  3. 教资篇(1)—高中信息技术科目
  4. 经纬度数据计算-JavaScript
  5. 怎么把解压的文件在HTML打开,解决电脑rar压缩包文件怎么打开?教你正确打开方式...
  6. -atime、-ctime、mtime、-newer
  7. Android同步时出错,android studio 0.4.2:Gradle项目同步失败错误
  8. 使用 patchrom 移植 MIUI
  9. 基于 EG6831 的无感 BLDC 控制方案
  10. PM online course from Youtube.com