一道笔试题求答案

2021-02-01 21:52:53 +08:00
 Yokin
昨天的一道面试题,想了好久都没有答案,听说 V2EX 大佬多
大佬勿喷,初级开发,能力有限,没想到合适答案。
8 个外表一样的小球,其中 7 个球重量相同,1 个球为[异常球],可能重量更轻也可能更重,利用天平称重至少多少次可以确保找出这个[异常球],并且知道到底是轻了还是重了。
(1)请先说明思路。
(2)使用 js 实现此思路。
(3)如何从性能的角度优化第(2)步的 js 代码?
4446 次点击
所在节点    职场话题
62 条回复
JerryY
2021-02-01 21:56:59 +08:00
看过类似的题目,好像是位运算符做的? 2^3 = 8 ?如果不对,证明我记错了。
Jooooooooo
2021-02-01 21:57:54 +08:00
称球的题目本身一搜都是答案

n 个球称几次能找出异常重量的球是有公式的
LadyChunsKite
2021-02-01 22:04:14 +08:00
称球的题目我记得好像是三等分来做。
但是你这个重量更轻也可能更重好像把问题复杂化了。
lance6716
2021-02-01 22:11:36 +08:00
概率空间{1 轻、1 重、2 轻、2 重…}共 16 种,理想情况下每次操作砍一半,所以最少要操作 4 次

具体咋操作,就慢慢想吧
yeqizhang
2021-02-01 22:15:13 +08:00
先各放 3,
如果在这 6 个球里,再各放 2,
如果在这 4 个球里,再各放 1,可以找到剩下的最后的 2 个中有一个异常球,
两球中再拿一球和六正常球中的一个对比就可以知道了。
最坏的情况 4 次,最快是 3 次。

暂时没抽象出公式出来……
Caballarii
2021-02-01 22:24:01 +08:00
@yeqizhang 最快不在这 6 个球里,两次
yeqizhang
2021-02-01 22:24:38 +08:00
上面漏了最坏的一次,应该是 5 次了。
比二等分还复杂,二等分称好像也是这个结果……是我想复杂了……
yeqizhang
2021-02-01 22:29:56 +08:00
@Caballarii 不知道轻重,所以还得称两次。其实理想情况下,一次各放 1 个,运气好是两次能找到轻重的那个。不过题目是确保找出来咯……
lemon6
2021-02-02 00:22:26 +08:00
3 次啊,2 分法!!
lxy42
2021-02-02 00:28:34 +08:00
有 v 友发过一篇文章解释这个问题: https://www.v2ex.com/t/504875?p=1
bushenx
2021-02-02 01:10:35 +08:00
二分,最好 3 最坏 4 吧
szxczyc
2021-02-02 02:35:19 +08:00
最快不是两次嘛,332,两两测。最少两次。
hawhaw
2021-02-02 06:37:33 +08:00
三次
kunkunzhang
2021-02-02 08:50:42 +08:00
三次,2 的 3 次为 8,建议搜索同款题,关键词:8 只小鼠 毒药
k3Sv1
2021-02-02 08:55:35 +08:00
只要两次。因为天平结果有三种。3^2=9 。
IvanLi127
2021-02-02 09:04:12 +08:00
三个和三个比,如果等重,那么剩下两个比,得出结论;否则轻的那三个中拿两个比。如果等重,剩下的一个轻;否则答案也出来了。
Biwood
2021-02-02 09:04:42 +08:00
单纯用二分法也不行,因为不知道异常球的轻重,第一次二分的时候你取哪边?
Biwood
2021-02-02 09:09:13 +08:00
二分法还不如枚举法,至少能达到目的,最坏 n 的平方,在此基础上再优化
JKeita
2021-02-02 09:15:13 +08:00
3 次
1 。两个与两个比较,相同说明在另外 4 个里,反之这在当前比较的 4 个里。
2 。拿出未比较的两个球,与上一步比较过的一组进行比较,相同说明在另一组(这一步就能看出到底是大还是小)
3 。同上再拿一颗球与上一步中其中一颗球比较,相同则说明另一颗为异。
DonaldY
2021-02-02 09:24:52 +08:00
两次

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/750433

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX