C语言 魔术师发牌问题

本文探讨了魔术师发牌问题,魔术师从一叠黑桃牌中取出13张,通过特定计数方式准确翻出每张牌。文章通过C语言解释了问题的解决方案,利用链表模拟过程,揭示了牌的原始顺序如何恢复的规律。
摘要由CSDN通过智能技术生成

/*
黑桃: A 2 3 4 5 6 7 8 9 10 J Q K
魔术师发牌问题的简介:
  一位魔术师掏出一叠扑克牌,魔术师取出其中13张黑桃,洗好后,把牌面朝下。
  说:“我不看牌,只数一数就能知道每张牌是什么?”
  魔术师口中念一,将第一张牌翻过来看正好是A;
  魔术师将黑桃A放到桌上,

  继续数手里的余牌,第二次数1,2,将第一张牌放到这叠牌的下面,将第二张牌翻开,
  正好是黑桃2,也把它放在桌子上。
  第三次数1,2,3,前面二张牌放到这叠牌的下面,
  取出第三张牌,正好是黑桃3,这样依次将13张牌翻出,全部都准确无误。

  求解:魔术师手中牌的原始顺序是什么样子的?
*/


/*
  规律
先初始化一个 好的单链表,
设定好 位置 为 1,2,3,4...13 ,标记是否是尾部
然后开始来 循环这个链表
用一个新的指针来标记 桌子上的牌
第一次不用循环 第一张(site = 1)放到桌子上,  位置 是 1 ,  值是1
第二次将手上第一张牌(site=2)放到链表尾部 第2(site =3)张牌值(value)设定为2 
第三次将手上第一张牌(site = 4)放到链表尾部 再将第二张牌(site=5)放到链表尾部, 再将第三张牌(site = 6)张牌放到桌子上链表尾部(并将这张牌的Value设定为3)

以此类推。。。。
 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值