切换导航
{{systemName}}
{{ info.Title }}
{{info.Title}}
{{ menu.Title }}
{{menu.Title}}
登录
|
退出
搜索
机器人坐标问题
作者:ych
#### 问题描述 有一个机器人,给一串指令,L左转 R右转,F前进一步,B后退一步,问最后机器人的坐标,最开始,机器人位于 0 0,方向为正Y。 可以输入重复指令n : 比如 R2(LF) 这个等于指令 RLFLF。 问最后机器人的坐标是多少? #### 解题思路 这里的一个难点是解析重复指令。主要指令解析成功,计算坐标就简单了。 #### 源码参考 ``` package main import ( "unicode" ) const ( Left = iota Top Right Bottom ) func main() { println(move("R2(LF)", 0, 0, Top)) } func move(cmd string, x0 int, y0 int, z0 int) (x, y, z int) { x, y, z = x0, y0, z0 repeat := 0 repeatCmd := "" for _, s := range cmd { switch { case unicode.IsNumber(s): repeat = repeat*10 + (int(s) - '0') case s == ')': for i := 0; i < repeat; i++ { x, y, z = move(repeatCmd, x, y, z) } repeat = 0 repeatCmd = "" case repeat > 0 && s != '(' && s != ')': repeatCmd = repeatCmd + string(s) case s == 'L': z = (z + 1) % 4 case s == 'R': z = (z - 1 + 4) % 4 case s == 'F': switch { case z == Left || z == Right: x = x - z + 1 case z == Top || z == Bottom: y = y - z + 2 } case s == 'B': switch { case z == Left || z == Right: x = x + z - 1 case z == Top || z == Bottom: y = y + z - 2 } } } return } ``` #### 源码解析 这里使用三个值表示机器人当前的状况,分别是:x表示x坐标,y表示y坐标,z表示当前方向。 L、R 命令会改变值z,F、B命令会改变值x、y。 值x、y的改变还受当前的z值影响。 如果是重复指令,那么将重复次数和重复的指令存起来递归调用即可。
相关推荐
golang 中解析 tag 是怎么实现的?反射原理是什么?(中高级肯定会问,比较难,需要自己多去总结)
使用gorm不当出现too Many Connections的问题
golang map 使用注意的点,是否并发安全?
uint 类型溢出问题
Golang中defer和return执行的先后顺序
golang orm框架 gorm
讲讲 Go 的 select 底层数据结构和一些特性?(难点,没有项目经常可能说不清,面试一般会问你项目中怎么使用select)
golang中两个变量值的4种交换方式
golang进行封包和拆包的完整解决方案
对已经关闭的 chan 进行读写,会怎么样?为什么?
调用函数传入结构体时,应该传值还是指针? (Golang 都是传值)
为 sync.WaitGroup 中Wait函数支持 WaitTimeout 功能.
单例模式的应用场景
Golang判断slice是否相等
Golang空结构体 struct{} 的使用
讲讲 Go 的 defer 底层数据结构和一些特性?
go defer,多个 defer 的顺序,defer 在什么时机会修改返回值?
序列化协议
Golang 单引号,双引号,反引号的区别?
Golang表示枚举类型的详细讲解
昨天那个在for循环里append元素的同事,今天还在么?
什么是死锁?死锁产生的原因?如何避免死锁?
golang并发题目测试
交替打印数字和字母
golang面试题
B+树为什么快
for range 的时候它的地址会发生变化么?
数组和切片的区别 (基本必问)
实现阻塞读且并发安全的map
复利计算 递归/非递归
在 golang 协程和channel配合使用
MySQL索引原理
写出以下逻辑,要求每秒钟调用一次proc并保证程序不退出?
讲讲 Go 的 slice 底层数据结构和一些特性?
高并发下的锁与map的读写
Redis的优点
常见语法题目2
判断两个给定的字符串排序后是否一致
字符串替换问题
ElasticSearch使用场景
常见语法题目1
golang 中 make 和 new 的区别?(基本必问)
七道语法找错题目
判断字符串中字符是否全都不同
golang 实现一个负载均衡案例(随机,轮训)
redis缓存穿透、缓存击穿、缓存雪崩原因+解决方案
基本数据结构和算法
消息队列使用的场景介绍
操作系统基本原理
翻转字符串
redis在项目中的使用
TiDB使用场景
评论区
先去登录
版权所有:机遇屋在线 Copyright © 2021-2025 jiyuwu Co., Ltd.
鲁ICP备16042261号-1