扑克洗牌 [No. 69]

本文探讨了如何将一副扑克牌分成K堆并进行洗牌操作,以达到复原状态。通过分析,我们可以使用一个int数组card表示扑克牌,并通过一个pointer数组记录每堆牌在card数组的起始位置。每次洗牌,将牌移到temp数组,检查是否恢复到原始顺序。给出的代码展示了如何计算洗牌次数,以实现牌的复原。
摘要由CSDN通过智能技术生成

给你一副牌,牌的张数为 N ,把它分成 K 堆,每一堆有 T = ( N / K )张 (假定N 能够被 K 整除)。分法如下:从牌的底部取 T 张给第一堆(顺序不变),再从底部取 T 张给第二堆,,,,最后把剩余的 T 张牌给最后一堆。比如,一副牌为 A B C D E F (顺序从上到下),如果把牌分成三堆,第一堆为 E F, 第二堆为 C D,第三堆为 A B。

把牌分好以后,然后再重新合成一幅整牌,合成一副牌的方法如下:从第一堆开始,每次从每一堆里取最顶上一张,把取的牌按照先后顺序放在一起,也就是说,后取的牌放在先取的牌下面,重复这样做,直到每一堆都没有牌剩余。从分牌到合牌这一个过程叫做洗牌。

当初我们把牌 A B C D E F 分成了三堆,第一堆为 E F, 第二堆为 C D,第三堆 为 A B,那么合成一幅牌以后,顺序为 E C A F D B

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值