由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 这个算法面试题没有做出来,刷了那么久的题,面试死在这题上了ZT
相关主题
[合集] 贡献几个面试题bloomberg和Google面经 发包子攒人品
很奇怪的面试结果,真是很受打击+FB的面经从地里转一个 大家共勉: 我的求职总结(EE找码农工作,已搞定
求教硬币组合问题贡献版面: Fb面经(流水账)
A家面经 (三轮电面)FLG面经,攒人品,回馈本版。
google和twitter的onsite面经问一道面经题
我也来贡献一G电面吧。Java developer都习惯初始化数组赋值0或者false吗?
压马僧面对面一道面试题
一道在线测试题 ArrayHopper微软电面题
相关话题的讨论汇总
话题: 张牌话题: 21话题: 发牌话题: 数组话题: 点数
进入JobHunting版参与讨论
1 (共1页)
A*****o
发帖数: 102
1
参加了一个面试,一道算法题是这样的,我没有做出来,大家帮我看看,我觉得好难。
题目根据回忆是这样的:
发牌人手上有52张扑克牌,在一个初始化好了的数组里面(已经知道牌的点数,J,Q,K
价值是 10,A 比较特殊可以 价值 1,也可以价值 11),发牌人自己能看见数组里牌
的点数和顺序,另外有四个人,发牌人可以把数组里面的牌一张一张的按照数组里的顺
序发给四个人中的任何一个(条件是这个人拿了这张牌后,他手中的牌点数之和小于等
于21),牌必须按照初始化好的数组里面的顺序发,发牌人想把一张牌发给4个人中的
谁就发给谁。发牌人也可以选择丢掉这张牌,不发给任何人。 如果当前4个人,拿了这
张牌,手上点数都大于21,那么发牌人必须把这张牌扔掉。任何人,手上的牌,点数之
和达到21点后,得把手上的所有牌扔掉,算成功达到21点一次,他又可以开始接牌。请
给发牌人设计一种算法(每张牌发给谁,还是丢掉),让4个人产生的21点成功次数总
和最多。 不涉及任何概率的问题,因为数组里的牌是已知的。
输入:数组,52个元素代表52张牌
要求输出:
(1) 整数的一维数组,52个元素,0代表丢掉了,1代表给了第一个人,2代表
给了第二个人,3代表给了第三个人,4代表给了第四个人
(2) 总共产生了几次21点
面试的时候,死在这道题上面,其他的题目都做对了,感觉这是离offer最近的一次。
郁闷死了!
b********6
发帖数: 35437
2
backtracing遍历所有组合?
h*********n
发帖数: 11319
3
哪家?

K

【在 A*****o 的大作中提到】
: 参加了一个面试,一道算法题是这样的,我没有做出来,大家帮我看看,我觉得好难。
: 题目根据回忆是这样的:
: 发牌人手上有52张扑克牌,在一个初始化好了的数组里面(已经知道牌的点数,J,Q,K
: 价值是 10,A 比较特殊可以 价值 1,也可以价值 11),发牌人自己能看见数组里牌
: 的点数和顺序,另外有四个人,发牌人可以把数组里面的牌一张一张的按照数组里的顺
: 序发给四个人中的任何一个(条件是这个人拿了这张牌后,他手中的牌点数之和小于等
: 于21),牌必须按照初始化好的数组里面的顺序发,发牌人想把一张牌发给4个人中的
: 谁就发给谁。发牌人也可以选择丢掉这张牌,不发给任何人。 如果当前4个人,拿了这
: 张牌,手上点数都大于21,那么发牌人必须把这张牌扔掉。任何人,手上的牌,点数之
: 和达到21点后,得把手上的所有牌扔掉,算成功达到21点一次,他又可以开始接牌。请

c*******t
发帖数: 1095
4
试试dp
num[i] = 第i张牌面额
F[i][p1][p2][p3][p4] = 从第i张牌开始, person1 的点数为p1, person2 的点数为
p2 ... person4的点数p4的状态 是能最多达到21的次数
= max(
F[i+1][p1][p2][p3][p4], // 弃牌
F[i+1][p1 + num[i+1]][p2][p3][p4] if p1 + num[i+1] < 21
F[i+1][0][p2][p3][p4] + 1, if p1 + num[i+1] == 21
... p2 , p3, p4 依次类推
)
return F[0][0][0][0][0].
想了想这个感觉基本就像是brute force了 runtime (52* 21^4), space (21^4)
d******c
发帖数: 2407
5
既然顺序随机,我不觉得有什么聪明算法,也就是BFS了,尽量通过剪枝来减少搜索空
间。
21这个数字不大,能用牌组合成21点的情况是有限的,先穷举出来。
如果这52张牌是完整一套,也就是4种花色每种13张,那么你的牌种类有限,上面所有
组合里可以筛掉一大部分(比如需要5张2的)
搜索开始以后,如果某人手里的牌是一个序列,那么根据你剩下的牌,只有某些组合才
能把它凑成21. 随着牌越来越少,很快会有人的牌再也凑不起来,可以忽略这个人。
R********n
发帖数: 3601
6
哪家这么变态

K

【在 A*****o 的大作中提到】
: 参加了一个面试,一道算法题是这样的,我没有做出来,大家帮我看看,我觉得好难。
: 题目根据回忆是这样的:
: 发牌人手上有52张扑克牌,在一个初始化好了的数组里面(已经知道牌的点数,J,Q,K
: 价值是 10,A 比较特殊可以 价值 1,也可以价值 11),发牌人自己能看见数组里牌
: 的点数和顺序,另外有四个人,发牌人可以把数组里面的牌一张一张的按照数组里的顺
: 序发给四个人中的任何一个(条件是这个人拿了这张牌后,他手中的牌点数之和小于等
: 于21),牌必须按照初始化好的数组里面的顺序发,发牌人想把一张牌发给4个人中的
: 谁就发给谁。发牌人也可以选择丢掉这张牌,不发给任何人。 如果当前4个人,拿了这
: 张牌,手上点数都大于21,那么发牌人必须把这张牌扔掉。任何人,手上的牌,点数之
: 和达到21点后,得把手上的所有牌扔掉,算成功达到21点一次,他又可以开始接牌。请

h*********2
发帖数: 444
7
尼玛这题目解释清楚 面试就过了一半了吧
1 (共1页)
进入JobHunting版参与讨论
相关主题
微软电面题google和twitter的onsite面经
请教一道题目我也来贡献一G电面吧。
问几个unix/c++工作面试题压马僧面对面
问一道少见的微软面试题。一道在线测试题 ArrayHopper
[合集] 贡献几个面试题bloomberg和Google面经 发包子攒人品
很奇怪的面试结果,真是很受打击+FB的面经从地里转一个 大家共勉: 我的求职总结(EE找码农工作,已搞定
求教硬币组合问题贡献版面: Fb面经(流水账)
A家面经 (三轮电面)FLG面经,攒人品,回馈本版。
相关话题的讨论汇总
话题: 张牌话题: 21话题: 发牌话题: 数组话题: 点数