魔术师的卡牌

2024-03-07 16:08
文章标签 卡牌 魔术师

本文主要是介绍魔术师的卡牌,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

此题目的:

  • 加深对循环链表的理解 
  • 增强对链表的使用能力

看到很多篇文章把这到问题写的不清不楚的,今天特意把这个题目叙述给大家,然后自己先想一想要怎么做。再来看题解。

某天,有个魔术师从一套完整的卡牌将13张张桃卡牌全部拿了出来,洗好了牌之后,展示给众人说,他对众人说,我不用看牌,只需要数数,就可以知道这张牌是什么,于是他把13张牌牌面向下,“第一张牌是 黑桃A”,他如此说道,然后把黑桃A扔到桌子上,此时手上还有12张牌,然后他又说道“从上往下数第二张牌是 黑桃2”,他把从上往下数的第一张牌拿到第12张牌,也就是最后一张牌的下面(没有看),然后翻看第二张牌,果真是是 黑桃2,然后他有说了“从上往下数第三张牌是 黑桃3”,于是他把前面两张牌按照原来的顺序放在最后一张牌的下面,翻开了第三张牌,果真是是 黑桃3,然后魔术师又把这张 黑桃3 扔到桌子上,就这样,反反复复,翻开了 13 张牌,魔术师说的每一张牌都是准确的,那么,他是怎么做到的呢?

 

问题转化:

其实就是一个魔术师在做翻牌之前,他是怎么放牌的问题。

首先,我们注意到,魔术师每次翻看完扑克牌以后,就把它扔到桌子上了,那么总的牌数就会减少。

其次,我们还注意到,每次魔术师翻看扑克牌之前都会把上面不翻看的扑克牌放到最下面。

魔术师做了 个动作,放牌    翻牌    扔牌,就这么重复这三种动作,所以答案肯定就在这个过程里面,假设我们固定 13 个盒子,将其标号为 1 - 13,如果盒子里面的扑克牌被翻看了,就为这个盒子盖上黑布,不准再碰了也不能在数数的时候算他一个,我们发现 当我们翻看 黑桃A 2 3 4 的时候,都是在 13 以内的,但是要翻 黑桃5 时,发现已经到最后一个盒子了,怎么办呢?我们想想魔术师怎么做的?---(放牌),没错,我们倒回去,从 1 号盒子开始,但是 1 号盒子已经被翻过了,不能再动它了,那这时候怎么办呢?死鬼,放聪明点,我们跳过这个 1 号格子不把它,到下一个盒子去,如果下一个盒子还这样我们继续跳过,前面留了这么多空,总会有没有翻过牌的盒子吧!(注意:无形中我们使用到了循环)

一张图看看:

 

需要用到循环,需要使用链表所以我们在开始解这项魔术之前要先定义循环链表哦!

#include <iostream>
#include <iomanip>
#include <malloc.h>
#include <memory.h>
#define N 13
using namespace std;//定义链表结构体
typedef struct Node{int data;struct Node *Next;
}Node,*LinkList;//初始化循环链表
LinkList InitLinkList(LinkList L)
{L = (Node*)malloc(sizeof(Node));L->Next = L;Node *p;for(int i = 0;i<N;i++){p = (Node*)malloc(sizeof(Node));p->data = 0;p->Next = L->Next;L->Next = p;}return L;
}int main()
{LinkList L = InitLinkList(L);int i;Node *p = (Node*)malloc(sizeof(Node));p = L->Next;p->data = 1;//放牌 翻牌 扔牌(就是跳过它,你也可以理解成跳牌)的过程for(int num = 2;num<=N;num++){i = 0;while(i < num){p = p->Next;	if(p->data == 0)i++;}p->data = i;}p = L->Next;//遍历while(p!=L){cout<<p->data<<" ";p = p->Next;}
}

怎么样?有趣吧!是的,学算法也可以这么有趣!

这篇关于魔术师的卡牌的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/784079

相关文章

九、制作卡牌预制体

文章目录 制作预制体Physic 2D Raycaster 射线检测 Physic 2D Raycaster 一、制作预制体 使用两个空物体作为父子级,分别挂UI 设置图层front、从上到下为1-6 父物体挂在一个Sorting组件,因为卡牌可以制作成为一个整体, 所以在父物体上挂载一个组件 二、射线检测组件 此项目未创建UI,若实现拖动卡片等功

3DMAX建筑魔术师MagicBuilding插件使用方法详解

3DMAX建筑魔术师MagicBuilding,一键创建单个或多个随机楼体,可以用来生成建筑场景中的配景楼,让你快速从繁重的体力劳动中解脱出来!            【建议版本】 3dMax2018及以上版本(不仅限于此范围) *以上只是建议版本,目前暂未发现不被支持的3dMax版本。            【安装方法】 方法一:拖动插件文件到3dM

跟LintCode的算法题杠上了(1728卡牌分组)

题目 给定一副牌,每张牌上都写着一个整数。 此时,你需要选定一个数字 X,使我们可以将整副牌按下述规则分成 1 组或更多组: 每组都有 X 张牌。 组内所有的牌上都写着相同的整数。 仅当你可选的 X >= 2 时返回 true。 1 <= deck.length <= 10000 0 <= deck[i] < 10000 示例1 输入: [1,2,3,4,4,3,2,1] 输出: tr

JS设计模式之“神奇的魔术师” - 简单工厂模式

引言 在JavaScript开发中,我们经常需要创建和管理各种对象,而简单工厂模式就是一种最简单的用来创建对象的设计模式。 简单工厂模式通过一个工厂类来创建相似的对象,而无需直接使用具体类来实例化对象。这样可以将对象的创建过程与使用过程分离,提供了更好的灵活性和可维护性。 在本篇文章中,我将为您讲解以下内容: 什么是简单工厂模式?它的基本思想和原理是什么? 如何在JavaScr

GAN:数据生成的魔术师

GAN:数据生成的魔术师 在数据科学的世界中,生成对抗网络(GAN)是一种革命性的工具,它能够生成高质量、逼真的数据。GAN由两个关键部分组成:生成器(Generator)和判别器(Discriminator)。生成器的目标是产生尽可能逼真的数据,而判别器则努力区分真实数据和生成器产生的数据。这种对抗过程推动了两个网络的性能不断提升,最终能够生成难以区分真假的数据。 GAN的工作原理 GAN

揭秘Python中的二维码魔术师:qrcode库的魔法

文章目录 揭秘Python中的二维码魔术师:qrcode库的魔法背景:为什么选择qrcode库?库简介:qrcode是什么?安装指南:如何将qrcode库纳入你的Python环境?快速入门:5个简单函数的使用方法1. 生成基本二维码2. 生成带有Logo的二维码3. 生成彩色二维码4. 自定义二维码大小5. 生成二维码并直接显示 应用场景:3个实际使用案例1. 二维码门票2. 二维码名片3.

一文读懂Web Codecs API:浏览器背后的媒体魔术师

引言 ​在早期的Web 网页中,视频播放通常要依靠 Flash 和 Silverlight 等插件来完成,浏览器是不支持直接播放视频的。 随着网络技术的发展,视频这种媒体方式的需求变得普遍,HTML5中,出现了一个新的元素Video,使得我们可以不借助插件播放视频。 当然,它并不支持所有的格式,而且不同的浏览器厂商支持的格式也有所不同,为什么会出现只支持部分格式? ​ ​在 Web 中,能实

基于java+单体服务 + 硬件(UWB定位基站、卡牌)技术架构开发的UWB室内定位系统源码 UWB定位技术 超宽带定位 高精度定位系统源码

基于java+单体服务 + 硬件(UWB定位基站、卡牌)技术架构开发的UWB室内定位系统源码  UWB定位技术 超宽带定位 高精度定位系统源码 UWB高精度定位系统采用先进的无线载波通信定位技术,通过在工作区域定位基站和现场人员佩戴的标签,实现对进入生产现场人员的高精度定位,复杂场景下检测精度最高可达10cm,系统容量大,判断准确,实时性好。基于系统定位功能开发的电子围栏及SOS报警等功

卡码网笔试题 | 114 小欧的平均数、115 组装手机、116 小欧的卡牌

114 小欧的平均数 这题审题要仔细一些,注意题目的真正意思其实是要我们确定三个数的奇偶性,当其中两个分别为一个奇数一个偶数时,我们可以调整第三个数,之后切换到可以匹配的状态下再次调整刚才那两个数中的一个。而不是找到加起来为偶数的两个数,将剩余一个数调整到和平均数一样的大小。 所以其实统计三个数奇偶性就行了。如果都是奇数或者都是偶数刚好满足条件,不用调整。否则一奇数两偶数,或者一偶数两奇数,都

卡牌——蓝桥杯十三届2022国赛大学B组真题

样例输入 4 51 2 3 45 5 5 5 样例输出 3 样例说明 这 5 张空白牌中,拿2张写1,拿1张写2,这样每种牌的牌数就变为了3,3,3,4, 可以凑出 3套牌,剩下2张空白牌不能再帮助小明凑出一套。 评测用例规模与约定 对于30%的数据,保证n ⩽ \leqslant ⩽ 2000; 对于100%的数据,保证n ⩽ \leqslant ⩽ 2 × 1 0 5 \