【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
魔术成功!最后一张牌与预留的牌相符。


结语

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

 

 


http://www.niftyadmin.cn/n/5380247.html

相关文章

卷积神经网络的基本结构

卷积神经网络的基本结构 与传统的全连接神经网络一样&#xff0c;卷积神经网络依然是一个层级网络&#xff0c;只不过层的功能和形式发生了变化。 典型的CNN结构包括&#xff1a; 数据输入层&#xff08;Input Layer&#xff09;卷积层&#xff08;Convolutional Layer&#x…

基于python+django+mysql的小区物业管理系统

该系统是基于pythondjango开发的小区物业管理系统。适用场景&#xff1a;大学生、课程作业、毕业设计。学习过程中&#xff0c;如遇问题可以在github给作者留言。主要功能有&#xff1a;业主管理、报修管理、停车管理、资产管理、小区管理、用户管理、日志管理、系统信息。 演示…

CCF编程能力等级认证GESP—C++4级—20231209

CCF编程能力等级认证GESP—C4级—20231209 单选题&#xff08;每题 2 分&#xff0c;共 30 分&#xff09;判断题&#xff08;每题 2 分&#xff0c;共 20 分&#xff09;编程题 (每题 25 分&#xff0c;共 50 分)小杨的字典田忌赛马 参考答案单选题判断题编程题1编程题2 单选题…

FPGA中的模块调用与例化

目录 一、模块调用与实例化 1.1 模块调用 1.2 模块实例化 1.3 Verilog例化语句及其用法 1.3.1 例化语句的基本格式 1.3.2 实例化三种不同的连接方法 二、模块调用实例-全加器与半加器 2.1 半加器模块 2.2 全加器模块 三、参数定义关键词与整数型寄存器 3.1 参数定义关…

[嵌入式系统-27]:RT-Thread -14- 操作系统配置:rtconfig.h文件与menuconfig命令

目录 一、rtconfig.h 1.1 概述 1.2 软硬件资源配置 1.3 功能模块选择 1.4 内核配置详解 1.5 调度器配置 1.6 硬件设备驱动配置 1.7 网络配置 1.8 调试配置 二、menuconfig 2.1 概述 2.2 主要功能 三、RT Thread配置 VS Linux配置 一、rtconfig.h 1.1 概述 rtco…

线程库接口模拟封装(使用参数包接受参数,2种方法)

目录 引入 模拟实现 思路 传递参数包 代码 thread.hpp main.cpp 示例 引入 之前我们一直使用的都是linux中的原生线程库,但c中其实是有提供封装好的线程库的 -- <thread> 下面我们也来试着封装一下线程接口 模拟实现 思路 首先,明确线程库的核心操作: 创建和销毁…

【leetcode刷题之路】面试经典150题(2)——双指针+滑动窗口+矩阵

文章目录 2 双指针2.1 【双指针】验证回文串2.2 【双指针】判断子序列2.3 【双指针】两数之和 II - 输入有序数组2.4 【双指针】盛最多水的容器2.5 【双指针】三数之和 3 滑动窗口3.1 【双指针】长度最小的子数组3.2 【滑动窗口】无重复字符的最长子串3.3 【哈希表】串联所有单…

OpenAl 视频生成模型 —— Sora技术报告解读

这里是陌小北&#xff0c;一个正在研究硅基生命的碳基生命。正在努力成为写代码的里面背诗最多的&#xff0c;背诗的里面最会写段子的&#xff0c;写段子的里面代码写得最好的…厨子。 写在前面 早上醒来&#xff0c;就看到OpenAl推出的视频模型Sora炸锅了&#xff0c;感觉所…