2016年腾讯实习后台开发工程师面试题-- N个骑士,聚会问题

昨天刚面了腾讯实习,被一道题给问懵逼了,网上也搜不到答案,回来找一个大牛师兄询问了一下,师兄给了一种思路,就把师兄的思路给大家记录一下,为下面的面试做准备。

这道题是一道主观题,不要求写代码,应该是主要考察面试者的思路。

问题:

在8X8的棋盘上分布着n个骑士,他们想约在某一个格中聚会。骑士(骑士初始位置已定)可以像国际象棋中的马(走日字)那样移动一次,可以从中间像8个方向移动(当然不能走出棋盘),请计算n个骑士的最早聚会地点。要求尽早聚会,且n个人走的总步数最少,先到聚会地点的骑士可以不再移动等待其他的骑士。

师兄分析:

首先要基于一个假设,就是骑士能够到达棋盘的每一个点。(验证这个假设的思路也很简单,就是考虑中国象棋里面的马,也是走日字的,就经验来说,马应该可以到达棋盘的任何位置,所以8*8的棋盘的骑士走日字应该也能到达棋盘的任何位置。)

确定了骑士可以到达棋盘的任何一个位置后,我们先分析一个骑士的问题,可以对一个初始位置已定的骑士计算到达棋盘上每个位置的距离(具体计算方法网上应该有参考的,就是骑士周游棋盘问题),对于棋盘上的每个点,都有一个到达距离值。

对于n个骑士,就计算N个骑士到达棋盘每个点的值。计算的结果应该是一个N*64的数组。

找到N*64个位置数组后,再对64个位置上距离比较,找到64个位置上的最大值。

再对64个位置上的最大值进行排序,找到64个位置上最大值的最小值,那个点就应该n个骑士最早的聚会地点。

最后,真是感叹师兄厉害啊,逻辑分析能力超强,我反正是无法再那么短的时间想出这个解决方案,哎,下面继续苦逼准备找工作吧,好好学习,天天向上。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值