今年春节联欢晚会中的扑克魔术到底是咋变的?

今年的刘谦给全国观众带来了俩魔术,一个是洗牌一个是撕牌,前面第一个魔术看不出来太神奇了,但是第二魔术感觉挺有趣的我可以简单分析分析。
在这里插入图片描述


然后我们列出这个魔术的关键步骤:

  1. 打乱四张牌
    1 2 3 4

  2. 对折、撕开、面向同一个方向重叠
    1 2 3 4 1 2 3 4

  3. 名字几个字久循环放几张
    4 1 2 3 4 1 2 3

  4. 拿三张牌插中间
    3 4 4 1 2 1 2 3

  5. 第一张牌藏起来
    4 4 1 2 1 2 3

  6. 南方人移动一张牌至中间;北方人移动一张牌至中间;不南不北移动三张至中间
    4 1 2 4 1 2 3

  7. 分类讨论

  8. 男生(以男生为例子,女生一样的)

    1. 扔一张
      1 2 4 1 2 3

    2. 念"见证奇迹的时刻"
      2 4 1 2 3 1

    3. “好运留下来”,每次移动一张牌至底部,然后丢掉一张牌,反复直到剩下一张牌
      2 1 2 3 1
      2 1 3 1
      2 1 3
      2 3
      3

  9. 女生

    1. 扔两张
      2 4 1 2 3

    2. 念"见证奇迹的时刻"
      1 2 3 2 4

    3. “好运留下来”,每次移动一张牌至底部,然后丢掉一张牌,反复直到剩下一张牌、
      1 2 3 2 4
      1 3 2 4
      1 3 4
      3 4
      3


以上就是全部的过程,我们可以发现魔术中虽然又名字或者是南北方或者是性别的区分,但是基本上到第四步都是一样的,在第四步的时候一定会有两张一样的牌分别在一开始还有最后,这个是因为前面无论你循环移动多少多少张牌都是按照12341234循环,然后再拿掉三张牌放中间必然前面后面是一样的牌。
把第一张牌藏起来之后,选择任意数量牌插入中间这个也不影响了,因为我们此时的目标牌是最后一张,只要数量不要太大不影响。
最后就是男生和女生的分类进行扔牌操作,其实就是一个约瑟夫环问题,把一张牌放到底部然后扔掉一张牌,那不就是约瑟夫环中的每隔一个数去掉一个数嘛,最终问题化简为找最后剩下那一张牌的位置。
男生是剩下七张牌,所以我们需要找到的位置是倒数第二个,女生剩下的牌数是六张牌,所以我们需要找到的位置是第三个。也就是说在"好运留下来"环节之前我们需要把原本的最后一张牌的位置调整到对应的位置。这里涉及到同余思想,男生需要移动到这个位置需要的次数除以6余1,女生需要移动到这个位置需要的次数除以5余2,所以最小的移动次数就是7,正好对应"见证奇迹的时刻"七个字。
那至于约瑟夫环问题如何快速知道最后那个位置在哪里呢?

问题描述:有n个人(编号从1到n)站成一个圆圈。从编号为1的人开始报数,数到m的那个人出列,然后从出列的下一个人开始重新报数,循环执行,直到所有人都出列。问题的目标是确定第i个淘汰的人编号。
思路:
1、当i较小时:ysf(int n,int m,int i):这个递归函数代表的意思为:有n个人,报到数字m时出局,求第i个人出局的编号。

y s f ( n , m , i ) = { ( y s f ( n − 1 , m , i − 1 ) + m ) % n i>1 ( M − 1 + N ) % N i=1 ysf(n,m,i) = \begin{cases} (ysf(n-1,m,i-1)+m)\%n & \text{i>1} \\ (M-1+N) \% N & \text{i=1} \end{cases} ysf(n,m,i)={(ysf(n1,m,i1)+m)%n(M1+N)%Ni>1i=1

2、当m较小时:每一次都是加k的操作,因此有很多时候这个%n很多时候都是没有用的,因此我们可以一次就将这些k都加上,以此来降低复杂度。
直接使用:

ll ysf(ll n, ll m, ll i)          //按顺序递归枚举 n表示当前剩余数量 m表示淘汰数量 k表示间隔人数
{
    if (i == 1) return (m - 1 + n) % n;   //只有一个的时候可以直接输出答案
    return (ysf(n - 1, m, i - 1) + m) % n;
}

ll ysf2(ll n, ll m, ll i)
{
    ll ct= n - i + 1;                    //表示当前剩余个数,从小往大枚举
    ll val= (m - 1) % ct;                //当前淘汰位置
    ll dang_qian=1;                 	//已经淘汰的个数
    while(dang_qian < i)
    {
        if(val + m >= ct + 1)             //下一个淘汰的位置已经超过本圈人数
        {
            ct++;                   //当前的总人数加一
            val= (val + m) % ct;         //计算新的一圈起点
            dang_qian++;            //计算当前淘汰的人数
            continue;
        }
        ll x=(ct-val-1)/(m - 1);      //计算本圈可以淘汰多少人
        x=min(x, i - dang_qian);      //如果本圈淘汰的人已经足够了取m-dang_qian
        dang_qian+=x;               //计算当前已经淘汰的人数
        val= val + m * x;                //计算当前淘汰的位置
        ct+=x;                      //计算当前剩余的人数
    }
    return val;
}

void solve()
{
    ll n,m,k;
    read(n);				//输入
    read(m);
    read(k);
    if(k==1)
    {
        printf("%lld\n",m);
        return ;
    }
    if(m<=(ll)1e6)printf("%lld\n",ysfdg(n,k,m)+1);     //直接按顺序枚举
    else    printf("%lld\n",ysf2(n,k,m)+1);
}

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

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

相关文章

机器学习系列——(二十二)结语

随着我们的机器学习系列的探索画上句号&#xff0c;我们不禁感慨于这一领域的广阔和深邃。从最初的基础概念到复杂的算法&#xff0c;从理论的探讨到实际应用的示例&#xff0c;我们一起经历了一段非凡的旅程。机器学习不仅是当前技术创新的核心驱动力之一&#xff0c;也是塑造…

【MySQL进阶之路】MySQL 中表空间和数据区的概念以及预读机制

欢迎关注公众号&#xff08;通过文章导读关注&#xff1a;【11来了】&#xff09;&#xff0c;及时收到 AI 前沿项目工具及新技术的推送&#xff01; 在我后台回复 「资料」 可领取编程高频电子书&#xff01; 在我后台回复「面试」可领取硬核面试笔记&#xff01; 文章导读地址…

ssm+vue的医药垃圾分类管理系统(有报告)。Javaee项目,ssm vue前后端分离项目。

演示视频&#xff1a; ssmvue的医药垃圾分类管理系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;ssm vue前后端分离项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结…

React18原理: 渲染与更新时的重点关注事项

概述 react 在渲染过程中要做很多事情&#xff0c;所以不可能直接通过初始元素直接渲染还需要一个东西&#xff0c;就是虚拟节点&#xff0c;暂不涉及React Fiber的概念&#xff0c;将vDom树和Fiber 树统称为虚拟节点有了初始元素后&#xff0c;React 就会根据初始元素和其他可…

使用Arcgis裁剪

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、掩膜提取二、随意裁剪三、裁剪 前言 因为从网站下载的是全球气候数据&#xff0c;而我们需要截取成中国部分&#xff0c;需要用到Arcgis的裁剪工具 一、掩…

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之Toggle组件

鸿蒙&#xff08;HarmonyOS&#xff09;项目方舟框架&#xff08;ArkUI&#xff09;之Toggle组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、Toggle组件 组件提供勾选框样式、状态按钮样式及开关样式。 子组件 仅当Toggl…

基于片段的3D分子生成扩散模型 - AutoFragDiff 评测

AutoFragDiff 是一个基于片段的&#xff0c;自回归的&#xff0c;口袋条件下的&#xff0c;3D分子生成扩散模型。 AutoFragDiff方法来源于文章《Autoregressive fragment-based diffusion for pocket-aware ligand design》&#xff0c;由加州大学的Mahdi Ghorbani等人于2023年…

[收藏] 数据结构知识全览

以下是数据结构技术主要知识的总结&#xff1a; 1. 基本数据结构 - 数组&#xff1a;固定大小的连续内存空间存储元素&#xff0c;支持随机访问。 - 链表&#xff1a;由节点组成的线性结构&#xff0c;每个节点包含数据和指向下一个节点的指针。 - 栈&#xff1a;后进先出&…

一文讲透SPSS中查看文件和变量信息

数据文件建立后&#xff0c;我们可能希望看到数据文件的结构和变量的组成以确定是否需要完善或修改&#xff0c;此时我们就需要用到文件和变量信息查看功能。 1. 查看变量信息 &#xff08;1&#xff09;在结果输出窗口中查看变量信息 在菜单栏中选择“文件”|“显示数据文件…

机器学习:回归决策树(Python)

一、平方误差的计算 square_error_utils.py import numpy as npclass SquareErrorUtils:"""平方误差最小化准则&#xff0c;选择其中最优的一个作为切分点对特征属性进行分箱处理"""staticmethoddef _set_sample_weight(sample_weight, n_samp…

websocket简易基操

一、概述 1.1 简介 WebSocket是HTML5下一种新的协议&#xff08;websocket协议本质上是一个基于tcp的协议&#xff09;&#xff0c;它实现了浏览器与服务器全双工通信&#xff0c;能更好的节省服务器资源和带宽并达到实时通讯的目的&#xff0c;Websocket是一个持久化的协议。…

【MySQL】数据库基础 -- 详解

一、什么是数据库 存储数据用文件就可以了&#xff0c;为什么还要弄个数据库? 一般的文件确实提供了数据的存储功能&#xff0c;但是文件并没有提供非常好的数据&#xff08;内容&#xff09;的管理能力&#xff08;用户角度&#xff09;。 文件保存数据有以下几个缺点&…

LeetCode 0094.二叉树的中序遍历:递归/迭代(栈模拟递归)

【LetMeFly】94.二叉树的中序遍历&#xff1a;递归/迭代(栈模拟递归) 力扣题目链接&#xff1a;https://leetcode.cn/problems/binary-tree-inorder-traversal/ 给定一个二叉树的根节点 root &#xff0c;返回 它的 中序 遍历 。 示例 1&#xff1a; 输入&#xff1a;root […

CVE-2022-0760 漏洞复现

CVE-2022-0760 NSS [HNCTF 2022 WEEK2]ohmywordpress 【CVE-2022-0760】 题目描述&#xff1a;flag在数据库里面。 开题&#xff1a; 顺着按钮一直点下去会发现出现一个按钮叫安装WordPress 安装完之后的界面&#xff0c;有一个搜索框。 F12看看network。 又出现了这个Wor…

C++入门学习(二十五)do-while循环

do { // 代码块&#xff0c;至少会执行一次 } while (条件); 对比一下while和do-while循环&#xff1a; 因为while循环先判断条件&#xff0c;所以数字10直接就没有进入for循环里&#xff0c;卡在了判断条件这一步&#xff0c;所以就没有输出数据&#xff1b; do-while循环是…

亚信安慧AntDB零故障割接方案的实践

亚信安慧AntDB秉持着为客户提供最佳数据库解决方案的理念&#xff0c;不断探索并创新&#xff0c;最近取得了重大的突破。他们成功地研发出一种先进的数据库割接方案&#xff0c;实现了不停服、零故障的数据库割接操作&#xff0c;有效地将替换所带来的业务影响降至最低。 这一…

基于SpringBoot的记账系统项目

点击以下链接获取源码&#xff1a;https://download.csdn.net/download/qq_64505944/88822660?spm1001.2014.3001.5503 Java项目-8 开发工具&#xff1a;IDEA/Eclipse,MySQL,Tomcat 项目框架&#xff1a;SpringBoot,layui 功能&#xff1a;可以按照类型和时间查询&#xff0c…

进程间通信——共享内存

在我的管道博客中曾说过关于进程间通信有很多的方式&#xff0c;管道是利用了Linux 内核原有的接口而创造的&#xff0c;且它只支持单向通信。那么既然有用了原来本来 就有的资源而创造的进程间通信方式&#xff0c;那么也有新创造的通信方式&#xff0c;其中就 有内存共享、消…

UDP是什么,UDP协议及优缺点

UDP&#xff0c;全称 User Datagram Protocol&#xff0c;中文名称为用户数据报协议&#xff0c;主要用来支持那些需要在计算机之间传输数据的网络连接。 UDP 协议从问世至今已经被使用了很多年&#xff0c;虽然目前 UDP 协议的应用不如 TCP 协议广泛&#xff0c;但 UDP 依然是…

飞天使-k8s知识点14-kubernetes散装知识点3-Service与Ingress服务发现控制器

文章目录 Service与Ingress服务发现控制器存储、配置与角色 Service与Ingress服务发现控制器 在 Kubernetes 中&#xff0c;Service 和 Ingress 是两种不同的资源类型&#xff0c;它们都用于处理网络流量&#xff0c;但用途和工作方式有所不同。Service 是 Kubernetes 中的一个…