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

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


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

  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_qiandang_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://xiahunao.cn/news/2777785.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

Windows下搭建Redis Sentinel

下载安装程序 下载Redis关于Windows安装程序&#xff0c;下载地址 下载成功后进行解压&#xff0c;解压如下&#xff1a; 配置redis和sentinel 首先复制三份redis.windows.conf&#xff0c;分别命名为&#xff1a;redis.6379.conf、redis.6380.conf、redis.6381.conf&…

无心剑中译佚名《春回大地》

The Coming of Spring 春回大地 I am coming, little maiden, With the pleasant sunshine laden, With the honey for the bee, With the blossom for the tree. 我来啦&#xff0c;小姑娘 满载着欣悦的阳光 蜂儿有蜜酿 树儿有花绽放 Every little stream is bright, All …

机器学习:分类决策树(Python)

一、各种熵的计算 entropy_utils.py import numpy as np # 数值计算 import math # 标量数据的计算class EntropyUtils:"""决策树中各种熵的计算&#xff0c;包括信息熵、信息增益、信息增益率、基尼指数。统一要求&#xff1a;按照信息增益最大、信息增益率…

iOS AlDente 1.0自动防过充, 拯救电池健康度

经常玩iOS的朋友可能遇到过长时间过充导致的电池鼓包及健康度下降问题。MacOS上同样会出现该问题&#xff0c;笔者用了4年的MBP上周刚拿去修了&#xff0c;就是因为长期不拔电源的充电&#xff0c;开始还是电量一半的时候不接电源会黑屏无法开机&#xff0c;最后连着电源都无法…

春晚刘谦魔术的模拟程序

昨晚春晚上刘谦的两个魔术表演都非常精彩&#xff0c;尤其是第二个魔术&#xff0c;他演绎了经典的约瑟夫环问题&#xff01; 什么是约瑟夫环问题&#xff1f; 约瑟夫环&#xff08;Josephus problem&#xff09;是一个经典的数学问题&#xff0c;最早由古罗马历史学家弗拉维…

VUE学习——数组变化侦测

官方文档 变更方法&#xff1a; 使用之后&#xff0c;ui可以直接发生改变。改变原数组 替换数组&#xff1a; 使用之后需要接受重新赋值&#xff0c;不然ui不发生改变。不改变原数组

JavaScript表单元素

&#x1f9d1;‍&#x1f393; 个人主页&#xff1a;《爱蹦跶的大A阿》 &#x1f525;当前正在更新专栏&#xff1a;《VUE》 、《JavaScript保姆级教程》、《krpano》、《krpano中文文档》 ​ ​ ✨ 前言 表单作为页面的重要交互组件,JavaScript 提供了丰富的表单元素操作方…

计算机网络第6章(应用层)

6.1、应用层概述 我们在浏览器的地址中输入某个网站的域名后&#xff0c;就可以访问该网站的内容&#xff0c;这个就是万维网WWW应用&#xff0c;其相关的应用层协议为超文本传送协议HTTP 用户在浏览器地址栏中输入的是“见名知意”的域名&#xff0c;而TCP/IP的网际层使用IP地…

Flink-CDC实时读Postgresql数据

前言 CDC,Change Data Capture,变更数据获取的简称,使用CDC我们可以从数据库中获取已提交的更改并将这些更改发送到下游,供下游使用。这些变更可以包括INSERT,DELETE,UPDATE等。 用户可以在如下的场景使用cdc: 实时数据同步:比如将Postgresql库中的数据同步到我们的数仓中…

每日五道java面试题之java基础篇(一)

第一题 什么是java? PS&#xff1a;碎怂 Java&#xff0c;有啥好介绍的。哦&#xff0c;⾯试啊。 Java 是⼀⻔⾯向对象的编程语⾔&#xff0c;不仅吸收了 C语⾔的各种优点&#xff0c;还摒弃了 C⾥难以理解的多继承、指针等概念&#xff0c;因此 Java 语⾔具有功能强⼤和简单易…

微信小程序checkbox多选

效果图 <view class"block"><view class"header"><view class"header-left"><text class"pu-title">数据</text><text class"pu-tip">至少选择一个指标</text></view>&l…

WebSocketServer方法里注入不了其他类

请直接看原文: WebSocketServer无法注入其他对象的问题 - 知乎 (zhihu.com) WebSocket服务无法使用自动注入解决方法_websocket sever不可以直接注入吧-CSDN博客 ------------------------------------------------------------------------------------------------------…

【数据结构】二叉树的顺序结构及实现(堆)

目录 1.二叉树的顺序结构 2.堆的概念及结构 3.堆的实现 3.1堆向下调整算法 3.2堆的创建 3.3建堆的时间复杂度 3.4堆的插入 3.5堆的删除 3.6堆的代码实现 3.7堆的应用 3.71堆排序 3.72 TOP-K问题 1.二叉树的顺序结构 普通的二叉树是不适合用数组来存储的&#xff0c;因…

vue父子组件通讯的几种方式总结学习

一直都是公司前端在写组件&#xff0c;我想着自己也写一波&#xff0c;然后先看看父子组件传值的内容&#xff0c;想写一写小demo然后练习一下这个内容&#xff0c;也算是系统学习一下怎么处理这个内容 其实就是2种父传子和子传父 1.父组件传子组件数据 其实就是父在标签中可…

学习Android的第八天

目录 Android ImageView 图像视图 ImageView 的基本使用 src属性和background属性的区别 范例 解决 anndroid:blackground 属性拉伸导致图片变形的方法 设置透明度的问题 范例 android:src 和 android:background 结合 范例 Java 代码中设置 blackground 和 src 属性…

分享66个表单按钮,总有一款适合您

分享66个表单按钮&#xff0c;总有一款适合您 66个表单按钮下载链接&#xff1a;https://pan.baidu.com/s/19lOG5sxI2Uy3KBIscffHRw?pwd8888 提取码&#xff1a;8888 Python采集代码下载链接&#xff1a;采集代码.zip - 蓝奏云 学习知识费力气&#xff0c;收集整理更不…

社区店经营策划书:从零到一,打造特色店铺

作为一名资深的鲜奶吧创业者&#xff0c;我深知开一家社区店并非易事&#xff0c;但凭借五年的经营经验和不断的学习&#xff0c;我成功地将我的鲜奶吧打造成为了一个特色店铺。 今天&#xff0c;我将与大家分享这份经营策划书&#xff0c;希望能为那些想开鲜奶吧或开其他店铺…

国产光耦2024:发展机遇与挑战全面解析

随着科技的不断进步&#xff0c;国产光耦在2024年正面临着前所未有的机遇与挑战。本文将深入分析国产光耦行业的发展现状&#xff0c;揭示其在技术创新、市场需求等方面的机遇和挑战。 国产光耦技术创新的机遇&#xff1a; 国产光耦作为光电器件的重要组成部分&#xff0c;其技…

TELNET 远程终端协议

远程终端协议 TELNET TELNET 是一个简单的远程终端协议&#xff0c;也是互联网的正式标准。 用户用 TELNET 就可在其所在地通过 TCP 连接注册&#xff08;即登录&#xff09;到远地的另一个主机上&#xff08;使用主机名或 IP 地址&#xff09;。 TELNET 能将用户的击键传到…

针对Sodinokibi黑客组织供应链攻击Kaseya VSA的分析溯源

前言 2021年7月2日&#xff0c;Sodinokibi(REvil)勒索病毒黑客组织疑似利用0day漏洞&#xff0c;通过Kaseya VSA发起大规模供应链攻击行动&#xff0c;此次事件影响范围广泛&#xff0c;目前瑞典最大链锁超市之一的Coop受此供应链勒索攻击事件影响被迫关闭全国约800多家商店服…