【C语言】解析刘谦春晚魔术《守岁共此时》
今年的春晚上刘谦表演了魔术《守岁共此时》,台上台下积极互动(尤其是小尼),十分的有趣。刘谦老师的魔术不仅仅是他的高超手法,还有这背后的严谨逻辑,下面我们来用C语言来解析魔术吧。

源代码
#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>
#include<time.h>
#include<stdlib.h>int main()
{srand(time(NULL)); // 使用当前时间作为随机数生成器的种子// 任意选四张牌int card[4];printf("请输入四个牌的数字\n");for (int i = 0; i < 4; i++){scanf("%d", &card[i]); // 输入四张牌的数字}int cardend[8];for (int i = 0; i < 4; i++){cardend[i] = card[i];}for (int i = 4; i < 8; i++){cardend[i] = card[i - 4];}// 报名字字数printf("请输入名字个数\n");int name = 0;scanf("%d", &name); // 输入名字个数int x = 0;for (int i = 0; i < name; i++){x = cardend[0];for (int j = 0; j < 7; j++){cardend[j] = cardend[j + 1];}cardend[7] = x;}// 最上面三张插到中间位置// 取随机数进行处理保证插的位置随机// 此时剩五张牌,有四个位置int cardmove[8];int where = rand() % 4 + 1; // 生成一个1到4之间的随机数for (int i = 0; i < where; i++){cardmove[i] = cardend[i + 3];}int num = 0;for (int i = where; i < where + 3; i++){cardmove[i] = cardend[num];num++;}int end = 7;for (int i = 0; i < 5 - where; i++){cardmove[end] = cardend[end];end--;}// 第一张牌printf("第一张牌为%d\n", cardmove[0]);cardmove[0] = 0;for (int i = 0; i < 7; i++){cardmove[i] = cardmove[i + 1];}// 南方人输入1,北方人输入2,不确定3张printf("南方人输入1,北方人输入2,不确定3张\n");int place = 0;scanf("%d", &place);for (int i = 0; i < 8; i++){cardend[i] = cardmove[i];}// 根据地区移动牌// 男生拿一张,女生拿两张printf("男生拿一张,女生拿两张\n");int sex = 0;scanf("%d", &sex);for (int i = 0; i < sex; i++){cardmove[i] = 0;}int numbercard = 8 - sex;// 见证奇迹的时刻挪七张printf("见证奇迹的时刻\n");int magic = 7;for (int i = 0; i < magic; i++){int first = cardmove[0];for (int j = 0; j < numbercard; j++){cardmove[j] = cardmove[j + 1];}cardmove[numbercard - 1] = first;}// 扔牌int flag = 1;while (numbercard > 1){if (flag > numbercard){flag -= numbercard;}while (cardmove[flag] == 0){flag++;}cardmove[flag - 1] = 0;printf("好运留下来\n");printf("烦恼丢出去\n");numbercard--;}int endcard = 0;for (int i = 0; i < 7; i++){if (cardmove[i] != 0){endcard = cardmove[i];}}printf("剩下的第一张为%d\n", endcard);
}
源代码解读
请对照上文的代码进行翻阅
#define _CRT_SECURE_NO_WARNINGS 1
这行代码是用来定义预处理器宏,用于禁用安全警告。在这里,它可能是为了避免一些特定的安全警告(scanf)。
srand(time(NULL));
这行代码使用当前时间作为随机数生成器的种子,以便在后续使用 rand() 生成随机数时能够获得不同的随机序列。
// 任意选四张牌int card[4];printf("请输入四个牌的数字\n");for (int i = 0; i < 4; i++){scanf("%d", &card[i]); // 输入四张牌的数字}
创建一个数组用来存贮选择的牌。
int cardend[8];for (int i = 0; i < 4; i++){cardend[i] = card[i];}for (int i = 4; i < 8; i++){cardend[i] = card[i - 4];}
将输入的四张牌按顺序复制到名为 cardend 的数组中,并将其重复一次,以便后续的处理。
int x = 0;for (int i = 0; i < name; i++){x = cardend[0];for (int j = 0; j < 7; j++){cardend[j] = cardend[j + 1];}cardend[7] = x;}
根据输入的名字个数,将牌进行移动,具体地,将数组 cardend 中的第一个元素依次移到数组的末尾,这个过程重复了名字个数次。
// 最上面三张插到中间位置// 取随机数进行处理保证插的位置随机// 此时剩五张牌,有四个位置int cardmove[8];int where = rand() % 4 + 1; // 生成一个1到4之间的随机数for (int i = 0; i < where; i++){cardmove[i] = cardend[i + 3];}int num = 0;for (int i = where; i < where + 3; i++){cardmove[i] = cardend[num];num++;}int end = 7;for (int i = 0; i < 5 - where; i++){cardmove[end] = cardend[end];end--;}
随机生成一个数 where,然后将数组 cardend 中的一部分元素插入到数组 cardmove 的中间位置。
// 第一张牌
printf("第一张牌为%d\n", cardmove[0]);
cardmove[0] = 0;
for (int i = 0; i < 7; i++)
{cardmove[i] = cardmove[i + 1];
}
输出数组 cardmove 中的第一个元素,并将其置为0。
// 南方人输入1,北方人输入2,不确定3张printf("南方人输入1,北方人输入2,不确定3张\n");int place = 0;scanf("%d", &place);for (int i = 0; i < 8; i++){cardend[i] = cardmove[i];}
根据用户输入的地区,移动牌的位置。
// 男生拿一张,女生拿两张printf("男生拿一张,女生拿两张\n");int sex = 0;scanf("%d", &sex);for (int i = 0; i < sex; i++){cardmove[i] = 0;}int numbercard = 8 - sex;
// 见证奇迹的时刻挪七张printf("见证奇迹的时刻\n");int magic = 7;for (int i = 0; i < magic; i++){int first = cardmove[0];for (int j = 0; j < numbercard; j++){cardmove[j] = cardmove[j + 1];}cardmove[numbercard - 1] = first;}
对牌堆进行特定的移动,重复了7次。
// 扔牌int flag = 1;while (numbercard > 1){if (flag > numbercard){flag -= numbercard;}while (cardmove[flag] == 0){flag++;}cardmove[flag - 1] = 0;printf("好运留下来\n");printf("烦恼丢出去\n");numbercard--;}
根据特定的规则,不断扔掉牌,直到只剩下一张牌。
int endcard = 0;for (int i = 0; i < 7; i++){if (cardmove[i] != 0){endcard = cardmove[i];}}printf("剩下的第一张为%d\n", endcard);
输出最后剩下的一张牌的数字,魔术结束。
祝大家新年快乐,龙年大吉!!

相关文章:
【C语言】解析刘谦春晚魔术《守岁共此时》
今年的春晚上刘谦表演了魔术《守岁共此时》,台上台下积极互动(尤其是小尼),十分的有趣。刘谦老师的魔术不仅仅是他的高超手法,还有这背后的严谨逻辑,下面我们来用C语言来解析魔术吧。 源代码 #define _CRT…...
剑指offer——数值的整数次方
目录 1. 题目描述2. 一般思路2.1 有问题的思路2.2 全面但不高效的思路2.3 面试小提示 3. 全面又高效的思路 1. 题目描述 题目:实现函数 double Power(double base,int exponent),求base 的exponent 次方。不得使用库函数,同时不需要考虑大数问题 2. 一般…...
Tied Block Convolution: 具有共享较薄滤波器的更简洁、更出色的CNN
摘要 https://arxiv.org/pdf/2009.12021.pdf 卷积是卷积神经网络(CNN)的主要构建块。我们观察到,随着通道数的增加,优化后的CNN通常具有高度相关的滤波器,这降低了特征表示的表达力。我们提出了Tied Block Convolutio…...
算法沉淀——BFS 解决 FloodFill 算法(leetcode真题剖析)
算法沉淀——BFS 解决 FloodFill 算法 01.图像渲染02.岛屿数量03.岛屿的最大面积04.被围绕的区域 BFS(广度优先搜索)解决 Flood Fill 算法的基本思想是通过从起始点开始,逐层向外扩展,访问所有与起始点相连且具有相同特性…...
wordpress外贸成品网站模板
首页大图slider轮播,橙色风格的wordpress外贸网站模板 https://www.zhanyes.com/waimao/6250.html 蓝色经典风格的wordpress外贸建站模板 https://www.zhanyes.com/waimao/6263.html...
如何使用六图一表七种武器
六图一表七种武器用于质量管理: 描述当遇到问题时应该用那张图来解决: 一、如果题目说出了质量问题需要找原因? 解:用因果图,因果图也称石川图或鱼骨图 二、如果要判断过程是否稳定受控? 解:…...
阿里云游戏服务器租用费用价格组成,费用详单
阿里云游戏服务器租用价格表:4核16G服务器26元1个月、146元半年,游戏专业服务器8核32G配置90元一个月、271元3个月,阿里云服务器网aliyunfuwuqi.com分享阿里云游戏专用服务器详细配置和精准报价: 阿里云游戏服务器租用价格表 阿…...
【C++】C++11上
C11上 1.C11简介2.统一的列表初始化2.1 {} 初始化2.2 initializer_list 3.变量类型推导3.1auto3.2decltype3.3nullptr 4.范围for循环5.final与override6.智能指针7. STL中一些变化8.右值引用和移动语义8.1左值引用和右值引用8.2左值引用与右值引用比较8.3右值引用使用场景和意义…...
【前端高频面试题--git篇】
🚀 作者 :“码上有前” 🚀 文章简介 :前端高频面试题 🚀 欢迎小伙伴们 点赞👍、收藏⭐、留言💬 前端高频面试题--git篇 往期精彩内容常用命令git add 和 git stage 有什么区别怎么使用git连接…...
c++创建对象
c创建对象 1.声明一个对象,然后使用默认构造函数来创建对象: class MyClass { public:MyClass() {// 构造函数代码} };int main() {MyClass obj; // 声明并创建一个对象return 0; }2.使用new和指针动态创建对象:不会自动释放 使用 new 运算…...
软件实例分享,洗车店系统管理软件会员卡电子系统教程
软件实例分享,洗车店系统管理软件会员卡电子系统教程 一、前言 以下软件教程以 佳易王洗车店会员管理软件V16.0为例说明 软件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 1、会员卡号可以绑定车牌号或手机号 2、卡号也可以直接使用手机号&a…...
【Docker进阶】镜像制作-用Dockerfile制作镜像(一)
进阶一 docker镜像制作 文章目录 进阶一 docker镜像制作用dockerfile制作镜像dockerfile是什么dockerfile格式为什么需要dockerfileDockerfile指令集合FROMMAINTAINERLABELCOPYENVWORKDIR 用dockerfile制作镜像 用快照制作镜像的缺陷: 黑盒不可重复臃肿 docker…...
数据密集型应用系统设计
数据密集型应用系统设计 原文完整版PDF:https://pan.quark.cn/s/d5a34151fee9 这本书的作者是少有的从工业界干到学术界的牛人,知识面广得惊人,也善于举一反三,知识之间互相关联,比如有个地方把读路径比作programming …...
分布式文件系统 SpringBoot+FastDFS+Vue.js【一】
分布式文件系统 SpringBootFastDFSVue.js【一】 一、分布式文件系统1.1.文件系统1.2.什么是分布式文件系统1.3.分布式文件系统的出现1.3.主流的分布式文件系统1.4.分布式文件服务提供商1.4.1.阿里OSS1.4.2.七牛云存储1.4.3.百度云存储 二、fastDFS2.1.fastDSF介绍2.2.为什么要使…...
【PyQt】11-QTextEdit、QPushButton
文章目录 前言一、文本输入-QTextEdit1.1 代码1.2 运行结果 二、QPushButton2.1.1 按钮上添加文本2.1.2 按键的弹跳效果2.1.3 两个信号可以绑定一个槽。2.1.4 带图标的按键运行结果 2.1.5 按键不可用以及回车默认完整代码2.2 单选按键控件运行结果 2.3 复选框(多选框…...
初识webpack(二)解析resolve、插件plugins、dev-server
目录 (一)webpack的解析(resolve) 1.resovle.alias 2.resolve.extensions 3.resolve.mainFiles (二) plugin插件 1.CleanWebpackPlugin 2.HtmlWebpackPlugin 3.DefinePlugin (三)webpack-dev-server 1.开启本地服务器 2.HMR模块热替换 3.devServer的更多配置项 (…...
什么是自编码器Auto-Encoder?
来源:https://www.bilibili.com/video/BV1Vx411j78H/?spm_id_from333.1007.0.0&vd_sourcef66cebc7ed6819c67fca9b4fa3785d39 为什么要压缩呢? 让神经网络直接从上千万个神经元中学习是一件很吃力的事情,因此通过压缩提取出原图片中最具代…...
openGauss学习笔记-219 openGauss性能调优-确定性能调优范围-硬件瓶颈点分析-网络
文章目录 openGauss学习笔记-219 openGauss性能调优-确定性能调优范围-硬件瓶颈点分析-网络219.1 查看网络状况 openGauss学习笔记-219 openGauss性能调优-确定性能调优范围-硬件瓶颈点分析-网络 获取openGauss节点的CPU、内存、I/O和网络资源使用情况,确认这些资源…...
SAP PP学习笔记- 豆知识01 - 怎么查询既存品目
SAP系统当中已经有哪些品目要怎么查询呢? 1,MM60 品目一览 这里可以输入Plant,然后可以查询该工厂的所有品目。 2,SE16 > MARA MARA 品目一般Data,存放的是品目基本信息。 如果要查询该品目属于哪个Plant&#x…...
相机的机身马达有什么用?
新手疑问: 为什么我的尼康D3200相机明明拥有拍视频能力,但是拍摄视频时却不能对焦 科普时间 那是因为你的相机缺少机身马达,并且你所使用的镜头也没有马达!机身马达是用于给镜头提供对焦动力的装置。它的作用是使相机具备自动对焦功能。如…...
谷歌浏览器插件
项目中有时候会用到插件 sync-cookie-extension1.0.0:开发环境同步测试 cookie 至 localhost,便于本地请求服务携带 cookie 参考地址:https://juejin.cn/post/7139354571712757767 里面有源码下载下来,加在到扩展即可使用FeHelp…...
深入剖析AI大模型:大模型时代的 Prompt 工程全解析
今天聊的内容,我认为是AI开发里面非常重要的内容。它在AI开发里无处不在,当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗",或者让翻译模型 "将这段合同翻译成商务日语" 时,输入的这句话就是 Prompt。…...
【WiFi帧结构】
文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成:MAC头部frame bodyFCS,其中MAC是固定格式的,frame body是可变长度。 MAC头部有frame control,duration,address1,address2,addre…...
相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了: 这一篇我们开始讲: 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下: 一、场景操作步骤 操作步…...
聊聊 Pulsar:Producer 源码解析
一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台,以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中,Producer(生产者) 是连接客户端应用与消息队列的第一步。生产者…...
测试markdown--肇兴
day1: 1、去程:7:04 --11:32高铁 高铁右转上售票大厅2楼,穿过候车厅下一楼,上大巴车 ¥10/人 **2、到达:**12点多到达寨子,买门票,美团/抖音:¥78人 3、中饭&a…...
【论文笔记】若干矿井粉尘检测算法概述
总的来说,传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度,通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...
【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验
系列回顾: 在上一篇中,我们成功地为应用集成了数据库,并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了!但是,如果你仔细审视那些 API,会发现它们还很“粗糙”:有…...
前端开发面试题总结-JavaScript篇(一)
文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包(Closure)?闭包有什么应用场景和潜在问题?2.解释 JavaScript 的作用域链(Scope Chain) 二、原型与继承3.原型链是什么?如何实现继承&a…...
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中,新增了一个本地验证码接口 /code,使用函数式路由(RouterFunction)和 Hutool 的 Circle…...
