【C/C++】2024春晚刘谦春晚魔术步骤模拟+暴力破解

 

        在这个特别的除夕夜,我们不仅享受了与家人的温馨团聚,还被电视机前的春节联欢晚会深深吸引。特别是,魔术师刘谦的精彩表演,为我们带来了一场视觉和心灵的盛宴。在我的博客“【C/C++】2024春晚刘谦春晚魔术步骤模拟+暴力破解”中,我将带领大家一探究竟,用编程的角度去解析刘谦的扑克牌魔术。

        刘谦的魔术不仅仅是技巧的展示,更是智慧和创意的结晶。他的表演激发了我们的好奇心,让无数观众纷纷拿起家中的扑克牌,尝试跟随他的步伐,去“见证奇迹”。在这篇博客中,我们将使用C/C++语言,尝试模拟魔术的每一个步骤,并探索可能的破解方法。通过编程的途径,我们不仅能深入理解魔术背后的逻辑,也能增强我们解决问题的能力。

        无论你是编程爱好者,还是魔术的忠实粉丝,我相信这篇博客都能为你带来全新的视角和体验。让我们一起揭开刘谦魔术的神秘面纱,探索那些看似不可能,却被巧妙设计和精湛技艺变为可能的奇迹吧。

目录

魔 术 步 骤 

步骤 1

步骤 2

步骤 3

步骤 4

步骤 5

步骤 6

步骤 7

代码如下

运行结果

结语


魔 术 步 骤 

首先,准备4张扑克牌,跟随魔术步骤,来一起“见证奇迹”。

步骤 1
  • 将准备好的4张扑克牌
  • 平均撕成两份
  • 并叠在一起
步骤 2
  • 将牌堆顶数量为
  • 【名字字数】的牌
  • 移至牌堆底
步骤 3
  • 将前三张牌放在牌堆中间
  • 并取出牌堆顶的牌
  • 放置在一旁
步骤 4
  • 取出牌堆顶的若干张牌
  • 插入牌堆中间
  • 此处选择的牌数为
  • 南方人取1张,北方人取2张
  • 若不确定是南方人还是北方人取3张
步骤 5
  • 男生扔掉牌堆顶1张
  • 女生扔掉牌堆顶2张
步骤 6
  • 执行“见证奇迹的时刻”循环
  • 每说一个字
  • 就取出牌堆顶一张牌放置在牌堆底
步骤 7

👇执行如下操作👇

  • 从牌堆顶开始
  • 每次先将牌堆顶的一张牌放在牌堆底
  • 再扔掉牌堆顶的一张牌
  • 重复以上操作直到只剩一张牌
  • 检查此牌和放置在一旁的牌是否吻合
  • 若吻合,则魔术成功

按照上面的魔术步骤用C/C++进行模拟和暴力破解

代码如下

#include <iostream>
#include <vector>
#include <algorithm> 

using namespace std;

struct Card {
    int value; // 用数字代表扑克牌,简化处理
};

// 打印牌堆
void printDeck(const vector<Card>& deck) {
    for (auto& card : deck) {
        cout << card.value << " ";
    }
    cout << endl;
}

// 步骤 2: 根据给定的名字字数移动牌
void moveCardsForName(vector<Card>& deck, int nameLength) {
    rotate(deck.begin(), deck.begin() + nameLength, deck.end());
}

// 步骤 3: 取出牌堆顶的牌并放置在一旁
Card takeTopCard(vector<Card>& deck) {
    Card topCard = deck.front();
    deck.erase(deck.begin()); // 移除顶部牌
    return topCard;
}

// 步骤 4: 根据地域移动牌
void moveCardsByRegion(vector<Card>& deck, int cardsToMove) {
    // 假设“地域”只影响移动的牌数
    rotate(deck.begin(), deck.begin() + cardsToMove, deck.end());
}

// 步骤 5: 根据性别移除牌
void removeCardsByGender(vector<Card>& deck, char gender) {
    int removeCount = (gender == 'M') ? 1 : 2;
    deck.erase(deck.begin(), deck.begin() + removeCount);
}

// 步骤 6: 循环移动牌
void cycleCards(vector<Card>& deck, const string& phrase) {
    for (size_t i = 0; i < phrase.length(); ++i) {
        Card card = deck.front();
        deck.erase(deck.begin());
        deck.push_back(card); // 将顶部牌移动到底部
    }
}

// 步骤 7: 执行最终操作,直到只剩一张牌,然后比较
bool finalOperationAndCompare(vector<Card>& deck, const Card& asideCard) {
    while (deck.size() > 1) {
        cout << "弃牌之前手里卡牌为: ";
        printDeck(deck);

        deck.push_back(deck.front()); // 将顶部牌移动到底部
        cout << "将顶部卡牌移至底部: ";
        printDeck(deck);

        deck.erase(deck.begin()); // 移除现在的顶部牌(原第二张牌,刚才移动过的)
        cout << "取出新的卡牌: ";
        printDeck(deck);

        deck.erase(deck.begin()); // 再次移除顶部牌,对应扔掉的操作
        cout << "移除下一张顶牌(弃牌): ";
        printDeck(deck);
    }

    cout << "最后一张牌为: " << deck.front().value << endl;
    cout << "之前步骤3,藏在屁股后面的卡牌为: " << asideCard.value << endl;

    return deck.front().value == asideCard.value;
}

int main() {
    // 初始化牌堆,每张牌各有两张
    vector<Card> deck = { {1}, {2}, {3}, {4}, {1}, {2}, {3}, {4} };

    cout << "初始卡牌: ";
    printDeck(deck);

    // 模拟魔术步骤
    moveCardsForName(deck, 3); // 假设名字长度为3
    cout << "移动卡牌后的名称: ";
    printDeck(deck);

    Card asideCard = takeTopCard(deck); // 执行步骤3并记下牌堆顶的牌
    cout << "抽取第一张卡牌藏在屁股后面: ";
    printDeck(deck);
    cout << "藏起来的卡牌是: " << asideCard.value << endl;

    moveCardsByRegion(deck, 2); // 假设是北方人
    cout << "执行步骤4,判断南北方人: ";
    printDeck(deck);

    removeCardsByGender(deck, 'M'); // 假设是男性
    cout << "执行步骤5,按性别删除卡牌: ";
    printDeck(deck);

    cycleCards(deck, "见证奇迹的时刻"); // 循环移动牌
    cout << "执行步骤6,循环移动卡牌后: ";
    printDeck(deck);

    cout << "执行步骤7,从牌堆顶开始,每次先将牌堆顶的一张牌放在牌堆底,再扔掉牌堆顶的一张牌,重复以上操作直到只剩一张牌" << endl;
    // 执行最终操作并比较
    bool isMagicSuccessful = finalOperationAndCompare(deck, asideCard);
    if (isMagicSuccessful) {
        cout << "魔术成功!最后一张牌与预留的牌相符。" << endl;
    }
    else {
        cout << "魔术失败!最后一张牌与预留的牌不符。" << endl;
    }
    
    return 0;
}

运行结果

模拟运行结果如下: 

初始卡牌: 1 2 3 4 1 2 3 4
移动卡牌后的名称: 4 1 2 3 4 1 2 3
抽取第一张卡牌藏在屁股后面: 1 2 3 4 1 2 3
藏起来的卡牌是: 4
执行步骤4,判断南北方人: 3 4 1 2 3 1 2
执行步骤5,按性别删除卡牌: 4 1 2 3 1 2
执行步骤6,循环移动卡牌后: 2 3 1 2 4 1
执行步骤7,从牌堆顶开始,每次先将牌堆顶的一张牌放在牌堆底,再扔掉牌堆顶的一张牌,重复以上操作直到只剩一张牌
弃牌之前手里卡牌为: 2 3 1 2 4 1
将顶部卡牌移至底部: 2 3 1 2 4 1 2
取出新的卡牌: 3 1 2 4 1 2
移除下一张顶牌(弃牌): 1 2 4 1 2
弃牌之前手里卡牌为: 1 2 4 1 2
将顶部卡牌移至底部: 1 2 4 1 2 1
取出新的卡牌: 2 4 1 2 1
移除下一张顶牌(弃牌): 4 1 2 1
弃牌之前手里卡牌为: 4 1 2 1
将顶部卡牌移至底部: 4 1 2 1 4
取出新的卡牌: 1 2 1 4
移除下一张顶牌(弃牌): 2 1 4
弃牌之前手里卡牌为: 2 1 4
将顶部卡牌移至底部: 2 1 4 2
取出新的卡牌: 1 4 2
移除下一张顶牌(弃牌): 4 2
弃牌之前手里卡牌为: 4 2
将顶部卡牌移至底部: 4 2 4
取出新的卡牌: 2 4
移除下一张顶牌(弃牌): 4
最后一张牌为: 4
之前步骤3,藏在屁股后面的卡牌为: 4
魔术成功!最后一张牌与预留的牌相符。


结语

❤表演结束,你的牌对上了吗?(●'◡'●)

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/388452.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

洛谷C++简单题小练习day12—寻找最小值小程序

day12--寻找最小值--2.16 习题概述 题目描述 给出 n 和 n 个整数 ai​&#xff0c;求这 n 个整数中最小值是什么。 输入格式 第一行输入一个正整数 n&#xff0c;表示数字个数。 第二行输入 n 个非负整数&#xff0c;表示 1,2…a1​,a2​…an​&#xff0c;以空格隔开。 …

leetcode:343.整数拆分

解题思路&#xff1a; 拆分的越多越好&#xff08;暂且认为&#xff09;&#xff0c;尽可能拆成m个近似相等的数&#xff0c;会使得乘积最大 dp含义&#xff1a;将i进行拆分得到最大的积为dp[i] 递推公式&#xff1a;j x dp[i-j](固定j&#xff0c;只通过凑dp[i-j]进而实现所…

报警产生器

1&#xff0e;  实验任务 用P1.0输出1KHz和500Hz的音频信号驱动扬声器&#xff0c;作报警信号&#xff0c;要求1KHz信号响100ms&#xff0c;500Hz信号响200ms,交替进行&#xff0c;P1.7接一开关进行控制&#xff0c;当开关合上响报警信号&#xff0c;当开关断开告警信号停止&…

SPI控制8_8点阵屏

协议与硬件概述 SPI SPI是串行外设接口&#xff08;Serial Peripheral Interface&#xff09;的缩写。是一种高速的&#xff08;10Mbps&#xff09;的&#xff0c;全双工&#xff0c;同步的通信总线&#xff0c;并且在芯片的管脚上只占用四根线。 引脚介绍 SCLK&#xff1a;…

2024年【安徽省安全员C证】考试题库及安徽省安全员C证免费试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 安徽省安全员C证考试题库根据新安徽省安全员C证考试大纲要求&#xff0c;安全生产模拟考试一点通将安徽省安全员C证模拟考试试题进行汇编&#xff0c;组成一套安徽省安全员C证全真模拟考试试题&#xff0c;学员可通过…

ChatGPT高效提问—prompt实践(教师助手)

ChatGPT高效提问—prompt实践&#xff08;教师助手&#xff09; 下面来看看ChatGPT在教育领域有什么用途。 首先设定ChatGPT的角色为高中教师助手。 输入prompt: ChatGPT输出&#xff1a; ​ 教师助手的角色已经设置完成。下面通过几种不同的情景演示如何使用。 1.1.1 制定…

专业130+总分420+厦门大学847信号与系统考研经验厦大信息系统与通信工程,真题,大纲,参考书。

今年很幸运被厦门大学录取&#xff0c;考研专业课847信号与系统130&#xff0c;数二130&#xff0c;总分420&#xff0c;回头看这将近一年的复习&#xff0c;还是有不少经验和大家分享&#xff0c;希望对大家复习有帮助。专业课&#xff1a; 厦门大学847信号与系统在全国各高校…

comfyui换脸学习笔记

目录 Portrait Maker ComfyUI_Lam 人脸融合方案&#xff1a; 圣诞写真工作流 IPadapter faceID/faceID plus/faceID plusV2/Reactor换脸效果对比来 Portrait Maker 核心用的是 EasyPhoto ComfyUI_Lam 人脸融合方案&#xff1a; demo效果还可以&#xff0c;真实效果不是很稳…

Linux操作系统基础(十四):集群服务器搭建

文章目录 集群服务器搭建 一、新增Linux服务器 1、克隆虚拟机 2、修改虚拟机的硬件配置 3、修改虚拟机的网络配置 二、关闭防火墙 1、关闭firewalld 2、关闭SElinux 三、修改主机名 四、修改hosts映射 五、SSH免密登录 六、时钟同步 七、远程文件拷贝 1、从本机拷…

网红铁头因涉黄经历遭全网封杀

关注卢松松&#xff0c;会经常给你分享一些我的经验和观点。 铁头根本没意识到自己是公众人物了。 知名网红“铁头惩恶扬善”帐号被全网封禁&#xff0c;原因是因为遭到别人举报&#xff0c;1月12日凌晨“铁头”在直播的时候呢&#xff0c;自爆其涉黄经历。 铁头居然自己在直…

二维数组及函数的非函数实现

2024年2月14日 1.请编程实现二维数组的杨慧三角 #include<stdio.h> #include<stdlib.h> #include<string.h> void Yanghui(int n,int (*p)[n]) {for(int i0;i<n;i){for(int j0;j<i;j){if(j0||ij){*(*(pi)j)1;}else{*(*(pi)j)*(*(pi-1)j-1)*(*(pi-1)j)…

HTML快速入门教程

HTML&#xff1a;超文本标记语言&#xff08;Hyper Text Markup Language&#xff09;&#xff0c;是通过标签的形式将内容组织起来然后共享到网络之上供其他电脑访问查看。 大家可以思考一下&#xff0c;怎么将自己电脑上的文件或图片共享给其他电脑&#xff1f; 这时候会说通…

计算机的历史以及原理

一、计算机发展历史 计算机的历史可以追溯到几个世纪前,但现代计算机的起源和发展主要经历了以下几个重要阶段: 1. 机械计算设备:早在17世纪,人们就开始尝试制造可以进行基本数学运算的设备。例如,法国哲学家兼数学家Blaise Pascal在1642年发明了Pascalene,这是一种用于…

洛谷_P1059 [NOIP2006 普及组] 明明的随机数_python写法

这道题的关键在于去重和排序&#xff0c;去重可以联想到集合&#xff0c;那排序直接使用sort方法。 n int(input()) data set(map(int,input().split( ))) data list(data) data.sort() print(len(data)) for i in data:print(i,end )

深度理解实分析:超越公式与算法的学习方法

在数学的学习旅程中&#xff0c;微积分和线性代数为许多学生提供了直观且具体的入门体验。它们通常依赖于明确的公式、算法以及解题步骤&#xff0c;而这些元素往往可以通过记忆和机械练习来掌握。然而&#xff0c;当我们迈入实分析的领域时&#xff0c;我们面临着一种全新的挑…

Nginx实战:日志按天分割

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言 一、方式1&#xff1a;定时任务执行分割脚本 1.分割日志脚本 2.添加定时任务 二、方式2&#xff1a;logrotate配置分割 1.logrotate简单介绍 2.新增切割ngi…

steam搬砖项目赚钱吗?3年亲身经历告诉你真相

csgo饰品交易市场由来已久&#xff0c;且玩家众多&#xff0c;绝对蓝海。而steam搬砖项目就是基于csgo游戏的交易。在steam用美金买入道具、装备和饰品&#xff0c;然后搬砖到国内的网易buff售卖&#xff0c;从中赚取一定的差价和汇率差额。 steam搬砖怎么赚钱&#xff1f;在s…

shumei 滑块 qd参数仿写记录

在对qd参数进行仿写的过程中&#xff0c;由于缺失很多js的基础知识&#xff0c;导致进展一度非常的缓慢&#xff0c;并且不知道自己的方向是不是正确的方向。在不知道自己的方向是否正确的时候&#xff0c;这个时候自己的投入的努力都是畏首畏尾。大概是一种&#xff0c;不知道…

【网站项目】229企业员工薪酬关系系统

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

在线Windows鼠标主题转换器(ani动态鼠标改为Xcur)

文章目录 前言在哪访问如何使用惨淡的界面简单粗暴的使用方法目前的bug 前言 在这篇文章中&#xff0c;我使用一些方法把转换脚本包装成了在线服务&#xff0c;现在我将说明如何使用服务。 在哪访问 还是说明一下&#xff0c;访问链是这个&#xff1a;https://www.sakebow.c…