程序员有趣的面试智力题及答案
1、考虑一个双人游戏。游戏在一个圆桌上进行。每个游戏者都
有足够多的硬币。他们需要在桌子上轮流放置硬币,每次必需且
只能放置一枚硬币,要求硬币完全置 于桌面内(不能有一部分
悬在桌子外面),并且不能与原来放过的硬币重叠。谁没有地方
放置新的硬币,谁就输了。游戏的先行者还是后行者有必胜策
略?这种策略 是什么?
答案:先行者在桌子中心放置一枚硬币,以后的硬币总是放在与
后行者刚才放的地方相对称的位置。这样,只要后行者能放,先
行者一定也有地方放。先行者必胜。
2、 用线性时间和常数附加空间将一篇文章的单词(不是字符)
倒序。
答案:先将整篇文章的所有字符逆序(从两头起不断交换位置相
对称的字符);然后用同样的办法将每个单词内部的字符逆序。
这样,整篇文章的单词顺序颠倒了,但单词本身又被转回来了。
3、用线性时间和常数附加空间将一个长度为 n 的字符串向左循
环移动 m 位(例如,"abcdefg"移动 3 位就变成了"defgabc")。
答案:把字符串切成长为 m 和 n-m 的两半。将这两个部分分别逆
序,再对整个字符串逆序。
评论0
最新资源