用 C++ 的方式揭秘 2024 春晚魔术背后的秘密!

2024年 3月 11日 54.6k 0

聊一聊

今年春晚,屏幕前的很多观众跟随刘谦的扑克牌魔术一起见证了奇迹,同时也让全国网友都知道了“小尼的扑克牌没对上”!

后来我们知道了,原来小尼两张牌是 Q 和 A。

或许这就是上天送给我们的巧合!

Q 跟 A 合在一起,世间万事皆有答案。

正如我们的生活:一半是问题、一半是答案。

用 C++ 代码模拟春晚魔术

1.概述

今天我用代码的方式,给大家揭露春晚魔术背后的秘密。

仅用代码模拟整个过程,不探讨其数学原理。

2.先看结果

(1) 抽取 4 张牌

首先要随机抽取 4 张牌,然后撕成两边,堆在一起:

(2) 按名字移动牌

把名字长度数量的牌放到底部:

(3) 移动开头 3 张牌

把开头的 3 张牌插入剩下牌中间:

(4) 藏牌

把最上面的牌藏起来:

(5) 按地区移牌

根据地区把开头对应数量的牌插入剩下牌中间:

(6) 按性别扔牌

按性别扔掉开头对应数量的牌:

(7) 见证奇迹的时刻

依次把开头的牌挪到末尾:

(8) 好运留下来烦恼丢出去

把开头的牌挪到末尾,然后扔一张牌,直到剩下一张:

(9) 结果对比

把剩下的牌和藏的牌比较:

3.关键知识点

(1) std::shuffle

std::shuffle 是 C++11 中引入的一个函数,用于随机排列容器中的元素,即洗牌。

(2) std::random_device

std::random_device 是 C++11 中引入的一个随机数生成器,用于生成随机数。

std::random_device 通常用于生成种子,然后用这些种子初始化其他随机数生成器,如 std::mt19937。

(3) std::rotate

std::rotate 是 C++ 标准库中的一个算法。

该算法用于旋转容器中的元素,将指定元素移动到容器的开头,同时将其他元素按照原来的顺序移动。

4.完整代码

void print_cards(const std::vector& deck) {
for (auto& card : deck) {
std::cout

相关文章

JavaScript2024新功能:Object.groupBy、正则表达式v标志
PHP trim 函数对多字节字符的使用和限制
新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
为React 19做准备:WordPress 6.6用户指南
如何删除WordPress中的所有评论

发布评论