免費論壇 繁體 | 簡體
Sclub交友聊天~加入聊天室當版主
分享
返回列表 发帖

[数列] 直路上的的机器人

本帖最后由 realnumber 于 2020-1-16 15:21 编辑

小朱编程作业之一,原题是“笨笨的乌龟“,
      只能在直线上运动的一机器人只接受2种指令,T,F,其中T表示反转方向,F表示前进一格,现在修改n次指令(可以同一个重复修改),使得机器人离开始位置最远.输入两行,第一行指令串,第2行修改次数n.输出最远距离.指令串长度不超过100.
比如FFTFTTF,意思是前进2格,反转,再1格,反转,反转,再1格,这样机器人还是回到原地.
比如上例n=3,把3个T都修改为F,那么指令为FFFFFFF,输出7
比如n=2,修改为FFFFFTF,输出4
比如n=1,修改为FFFFTTF,输出5
小伙子累计花了近1个半小时,修改了4个版本,用“分治”办法,终于通过了举的几个样例,自称题目已经转化得面目全非了。因为不太懂“分治”,整个过程我就当小黄鸭,我来考虑只能是解数学题的思路,特殊到一般,I am behind.程序,我还是不学下去了吧?
      “我不太懂你的思路,但是你解决问题的过程,爸爸觉得很不错,难题就这样,对问题的理解也越来越深刻”
我也说了下我的想法,可惜当时不够成熟,只能等小伙子回来再说了,也说明考虑速度也behind了 .
我的办法,以上例子转化为数字就是2-1+0-1(符号+-就是T,0没有指令),
保留0个T,输出7;保留1个T,就保留最初或最后的T(要比较过);保留2个T,就用这2个T夹着绝对值最小的数字(其余同号,就夹着的异号,当然选最小的);
保留3个T,把保留1个和2个结合起来,更一般地推广到奇数个和偶数个。
比如更复杂的指令串+1-2+5-4+1-2+0-3+9+2(即T1T2T5T4T1T2TT3T9T2),比如保留4个T,T1T2T5T4T1T2TT3T9T2,4个粗体保留,其余修改为F;保留奇数个,先保留1个T,就保留最初或最后的T,转化为保留偶数个,再比较大小.
这个办法好处是运行时间O(指令串长度).只是没有抓住时机,....
这个办法有没问题?
分享到: QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友

返回列表 回复 发帖