【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相机明明拥有拍视频能力,但是拍摄视频时却不能对焦 科普时间 那是因为你的相机缺少机身马达,并且你所使用的镜头也没有马达!机身马达是用于给镜头提供对焦动力的装置。它的作用是使相机具备自动对焦功能。如…...

深度学习在微纳光子学中的应用
深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...
Vue记事本应用实现教程
文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展:显示创建时间8. 功能扩展:记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...

TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...
java_网络服务相关_gateway_nacos_feign区别联系
1. spring-cloud-starter-gateway 作用:作为微服务架构的网关,统一入口,处理所有外部请求。 核心能力: 路由转发(基于路径、服务名等)过滤器(鉴权、限流、日志、Header 处理)支持负…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...
python如何将word的doc另存为docx
将 DOCX 文件另存为 DOCX 格式(Python 实现) 在 Python 中,你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是,.doc 是旧的 Word 格式,而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...

相机从app启动流程
一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...

论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)
笔记整理:刘治强,浙江大学硕士生,研究方向为知识图谱表示学习,大语言模型 论文链接:http://arxiv.org/abs/2407.16127 发表会议:ISWC 2024 1. 动机 传统的知识图谱补全(KGC)模型通过…...
C++.OpenGL (10/64)基础光照(Basic Lighting)
基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...
AI编程--插件对比分析:CodeRider、GitHub Copilot及其他
AI编程插件对比分析:CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展,AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者,分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...