查看原文
其他

几道程序员面试题

唐巧 唐巧 2021-08-29




最近一个 iOS 开发的朋友找工作,在群里面分享了几道面试题,恰好有几道我很早以前做过,是知乎和雅虎的面试题,所以分享给大家。


面试题这种有点类似于应试教育,你做得多了就有感觉了,所以积累还比较重要。


第一题


A、B、C、D四个人分别带着一顶帽子。共两顶黑帽子,两顶白帽子。其中D和A、B、C三个隔了一堵不透明的墙。A可以看到B、C帽子的颜色。B可以看到C帽子的颜色。只要能判断自己的帽子颜色,就可以立刻说出来。他们四人沉默了几分钟,这时候一个人说到,他知道自己帽子的颜色是什么了,请问这个人是谁?


第二题


老王卖鞋,一双进价30元,老王赔本卖,只卖20元。有个骗子来买,给老王50元假钞。老王未能识别,又没有零钱,把这假钞拿到隔壁铺子的老李换了50元零钱,回来找了骗子30。隔壁很快发现问题,拿假钞来换,老王只好把自己的家底真钞50元换给隔壁。问老王损失了多少钱?


第三题(知乎面试题)


25匹马,5条跑道。要选出最快的前三名,最少要跑几次?


第四题(雅虎面试题)


有23枚硬币在桌上,10枚正面朝上。蒙住你的眼睛(你无法分清正反),如何分成两组,让两组硬币正面朝上的一样多?


第五题


有三个杯子,容量各是10升、7升、3升。把10升的装满水。问:不用别的测量,怎样能将 10 升水分成两个 5 升。



-- 分隔线,思考好了可以往下翻对答案 --













-- 分隔线,思考好了可以往下翻对答案 --


第一题答案


题目:

A、B、C、D四个人分别带着一顶帽子。共两顶黑帽子,两顶白帽子。其中D和A、B、C三个隔了一堵不透明的墙。A可以看到B、C帽子的颜色。B可以看到C帽子的颜色。只要能判断自己的帽子颜色,就可以立刻说出来。他们四人沉默了几分钟,这时候一个人说到,他知道自己帽子的颜色是什么了,请问这个人是谁?


答案:B。


解释:因为场上一共只有 2 黑 2 白。所以:

  • 如果有一个人看到了 2 个黑帽子,那么他就可以据此推断出自己是白帽子;

  • 如果他看到了 2 个白帽子,那么他就可以据此推断出自己是黑帽子。


因为场上只有 A 能够看到 2 个人的帽子,而他没有说话,说明他看到的是一黑一白的帽子。

因为 A 没有说话,所以 B 和 C 知道了他们俩是一黑一白的帽子。

又因为 B 能看到 C 的帽子颜色,所以 B 就可以知道自己的颜色刚好就是与 C 相反的颜色。


第二题答案


题目:

老王卖鞋,一双进价30元,老王赔本卖,只卖20元。有个骗子来买,给老王50元假钞。老王未能识别,又没有零钱,把这假钞拿到隔壁铺子的老李换了50元零钱,回来找了骗子30。隔壁很快发现问题,拿假钞来换,老王只好把自己的家底真钞50元换给隔壁。问老王损失了多少钱?


答案:60 元。


解释:这道题容易把人绕晕,我想了一个办法理清楚,就是把老王收到的和拿出去的钱财分开单列,最后收到的和付出的相抵,就是正确答案。


那么老王收到的东西有:

  • 一张假钞(价值0)

  • 找老李换来的 50 元零钱


老王付出的东西有:

  • 一双鞋。值 30 元。

  • 找给骗子的 30 元零钱。

  • 退给老李的 50 元钱。


所以最终老王亏了 30 + 30 + 50 - 50 = 60 元。


第三题答案


题目:25匹马,5条跑道。要选出最快的前三名,最少要跑几次?


答案:7 次。


解释:先把 25 匹马分成 5 组,我们把这 5 组叫做 A、B、C、D、E 组。这 5 组先各进行一次比赛。这样已经有 5 个小组第一了。


然后 5 个小组第一再比一次,这样就找出了第一名,我们把第一名所在的组叫 A 组,第二名所在的组叫 B 组,第三名所在组叫 C 组。


剩下我们需要判断 A2, A3, B1, B2, C1 这几个到底谁更快。这样就可以找出最快的三匹马。


之所以这样比,是因为前三名有可能有以下四种情况:

  • 前三名都直接在一个小组内。

  • 前三名分别在三个不同小组内。

  • 前三名前两名一组,第三名一组。

  • 前三名第一名在一组,另两名在一组。


比较  A2, A3, B1, B2, C1 就可以把以上情况都考虑到。


衍生问题:如果我们要找出前五名,最少要比几次?


第四题答案


题目:有23枚硬币在桌上,10枚正面朝上。蒙住你的眼睛(你无法分清正反),如何分成两组,让两组硬币正面朝上的一样多?


答案:把硬币分成两组,一组 10 个,另一组 13 个。然后把 10 个的那组翻面即可。


解释:因为我们是随机分成两组,所以 10 个那组( 我们叫 A 组),我们假设有 X 个硬币朝上。那么就有 10 - X 个硬币朝下。

另一组(我们叫 B 组),因为 23 个硬币一共只有 10 枚朝上,所以那组有 10 - X 个朝上,剩下的朝下。


我们将 A 组全部翻面,所以朝上朝下个数交换:朝上的变成 10 - X 个,朝下的变成 X 个。


所以 A 组有 10 - X 个朝上,与 B 组朝上的个数相同。


第五题答案


题目:有三个杯子,容量各是10升、7升、3升。把10升的装满水。问:不用别的测量,怎样能将 10 升水分成两个 5 升。


答案:

  • 先往 3 升杯子里面倒满水,然后把水从 3 升杯子中转入 7 升杯子中。

  • 以上步骤重复 3 次。到第三次的时候,7 升杯子装满了,3升杯子中还剩 2 升水。

  • 这个时候把 7 升杯子的水倒回 10 升杯子。

  • 把 3 升杯子剩的 2 升水倒到 7 升杯子。

  • 最后再倒满 3 升杯子,然后把 3 升杯子的水倒到 7 升杯子。

  • 此时,10 升杯子和 7 升杯子里,各有 5 升水。



就酱,欢迎留言分享你觉得有挑战的面试题~

    : . Video Mini Program Like ,轻点两下取消赞 Wow ,轻点两下取消在看

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存