Sicily 1018 A Card Trick —— 教你玩一个纸牌魔术

助手给观众一幅扑克,52张的,没有鬼,让观众任取5张

助手把5张牌排序一下(这是关键),然后把第一张给回观众,剩下4张交给
魔术师,魔术师说出第一张牌是什么

原理是这样的

5张牌中必有两张是同样花色的

助手找出两张同样花色的牌,看点数,例如是2和7,由于7-2=5<=6,让7放前面。
如果是2和9,9-2=7>6,那么让2放前面。使得前面的牌的点数a和后面的牌的点数b
满足(a-b+13)%13<=6,其中%是取余数的意思,例如15%13=2

剩下的三张牌中,找出最小的那张,方块A最小,黑桃K最大

假设之前的(a-b+13)%13=c(0<c<=6)
在剩下的三张牌中,如果 c<4,让最小的牌放在第 c 个位置,否则放在第 c - 3 个位置

剩下的两张牌,如果 c > 3, 那么使前面那张牌比后面大,否则使前面那张牌比后面小。

这样5张牌的顺序就排好了,把第一张给回观众,剩下四张给魔术师

然后魔术师拿着4张牌,除去开头那张牌,找出最小那张牌的位置p(p = 1或2或3),
然后除去这张牌,剩下的两张牌如果前面的比后面的大,则 p 加上 3,这是 p 就可能为 1 ~ 6。

再看开头的那张牌的点数 b, 则观众那张牌的点数 a = (b + p) % 13,花色一样。

就这样,是今天在 Sicily 做的题1018.A Card Trick。题中描述了解密的过程,然后自己想怎样加密
并编程实现。

例如观众抽到 方块4  红心5  梅花10  方块10  红心Q,
那么排序为 红心5  红心Q 方块10  梅花10  方块4
在最后三张牌中,最小的方块4排第3,另外两张牌方块10和梅花10顺序反了,所以得到
p = 3 + 3 = 6。那么第一张牌为 (12 + 6) % 13 = 5,注意Q是12.

当然排序结果不一定是唯一的。

哈哈,现在可以去唬人鸟~~~

PS:这是我在sicily做的第 150 题,升级成 Class 5 - Beetle 了,呵呵。。赶在回家之前。。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值