作业4:中点查找算法
作为解决算法问题的练习,你的任务是通过编程来查找第一行的中点。
假设Karel在一个5x5的世界中从第一行第一列的角落开始。
应该结束在第一行的中点上即第一行第三列的角落。
请注意,最终的世界只有在第一行的中点有一个蜂鸣器。
在此过程中,Karel 可以在任何它想放置的地方放置额外的蜂鸣器,
但必须在完成之前再次将它们全部捡起。
在解决这个问题时,你可以依靠以下有关世界的事实:
1.Karel初始状态:第一行第一列的角落,面向东方;包里有1000个蜂鸣器
2.世界初始状态:没有内墙或蜂鸣器;
3.世界不一定是正方形的,但您可以假设它至少与宽度一样高;
此外,您的程序可以假定以下简化:
1.如果世界的宽度为奇数,Karel 必须将蜂鸣器放在中心角落里;
2.如果世界的宽度为偶数,Karel 可以将蜂鸣器放在两个中心角落里的任何一个上;
3.Karel结束时面向哪个方向并不重要。
🚀您可以使用许多不同的算法来解决此问题,因此请随意发挥创意!🌻
⏳开始你的编程之旅吧!
🔥逐步求精法🔥
🔥边开发边迭代测试🔥
函数 |
描述 |
函数 |
描述 |
move() |
向前移动一步 |
turn_left() |
向左转90度 |
pick_beeper() |
拾取当前位置的蜂鸣器 |
put_beeper() |
在当前位置放置蜂鸣器 |
front_is_clear() |
检查前方是否有墙 |
front_is_blocked() |
检查前方是否被墙挡住 |
left_is_clear() |
检查左侧是否有墙 |
left_is_blocked() |
检查左侧是否被墙挡住 |
right_is_clear() |
检查右侧是否有墙 |
right_is_blocked() |
检查右侧是否被墙挡住 |
beepers_present() |
检查当前位置是否有蜂鸣器 |
no_beepers_present() |
检查当前位置是否没有蜂鸣器 |
beepers_in_bag() |
检查背包中是否有蜂鸣器 |
no_beepers_in_bag() |
检查背包中是否没有蜂鸣器 |
facing_north() |
检查是否面向北方 |
not_facing_north() |
检查是否没有面向北方 |
facing_south() |
检查是否面向南方 |
not_facing_south() |
检查是否没有面向南方 |
facing_east() |
检查是否面向东方 |
not_facing_east() |
检查是否没有面向东方 |
facing_west() |
检查是否面向西方 |
not_facing_west() |
检查是否没有面向西方 |