当前位置: 首页 > article >正文

2024刘谦春晚第二个扑克牌魔术

前言

就是刚才看春晚感觉这个很神奇,虽然第一个咱模仿不过来,第二个全国人民这么多人,包括全场观众都有成功,这肯定是不需要什么技术,那我觉得这个肯定就是数学了,于是我就胡乱分析一通。

正文

首先准备4张扑克牌

假设4张扑克牌用a、b、c、d来表示,洗牌就是把abcd的顺序打乱,这里abcd是等价的,分别表示4个数字,这里假设他顺序就是abcd已经洗好的。

对折撕开

他撕开排列之后的顺序就变成了abcdabcd。

按照名字的字数移动

这个按照姓名的字数移动,假设姓名的个数为n,他最后需要移动其实就是n%4,这里假设对折撕开的两部分a和a是一样的,没有区别,移动4的倍数其实就等价为没有移动。

0 abcdabcd

1 bcdabcda

2 cdabcdab

3 dabcdabc ……

拿起最上面3张插入到中间

假设姓名是2个字,结果为cdabcdab,拿着三张插入到中间,之后他第一张和最后一张其实都是b了,中间的顺序不用考虑。

取最上面一张放一边

这里刚好取的就是确定的b,之后的思路就是考虑最后留下来的是最后半张扑克牌的b就行了。

按南北方,认为自己是南方人把最上面1张插入到中间,认为自己是北方人把最上面2张插入到中间,不确定的把最上面3张插入到中间

这里不管移动几张其实插入的都是中间,中间我们不需要考虑他的顺序,此时他最后半张扑克牌依旧是b。

按男女,男生丢掉最上面一张,女生丢掉最上面两张

到这里扑克牌个数又发生了改变,但是依旧没有影响最后一张扑克牌。

男生:6张

女生:5张

见证奇迹的时刻

这句话七个字。

男生移动之后,b成为倒数第二张,正数第五张

女生移动之后,b成为倒数第三张,正数也是第三张

第一张放最后,第二张丢出去,第三张放最后,第四章丢出去……

编写一个程序,要求按照这个步骤操作,最终留下来的是第几张扑克牌。

当然用链式可能会更好,但是我这里不考虑时间复杂度什么,主要是实现改功能,暂时不考虑效率。

#include<iostream>
using namespace std;

int main(){
	int n;
	int i,j;
	cout<<"请输入扑克牌的个数:";
	cin>>n;
	int *arr=new int(n);
	//存入数据表示他的顺序
	for(i=0;i<n;i++){
		arr[i]=i+1;
	}
	
	//循环n-1次即可,每次删除一个元素
	for(i=n-1;i>=0;i--){
		//暂存第一张
		int tmp=arr[0];
		//后面的往前面移动
		for(j=0;j<i;j++){
			arr[j]=arr[j+1];
		}
		//第一张放最后
		arr[i]=tmp;
		//移除第一张
		for(j=0;j<i;j++){
			arr[j]=arr[j+1];
		}
	}
	cout<<"您要取的扑克牌是第 "<<arr[0]<<" 张"<<endl;
	return 0;
}

补:

晚上躺床上睡不着,又在想这个问题。

他不就是每轮保留奇数,删除偶数,通过一个变量来记录当前是奇数次操作还是偶数次操作,如果是奇数次操作就将这个数保留,如果是偶数次操作就把数组元素置0表示清空,之后操作n-1次之后剩下的那个数就是需要的那个。

#include<iostream>
using namespace std;

int main(){
	int n;
	int i,j;
	int count=0;
	cout<<"请输入扑克牌的个数:";
	cin>>n;
	int *arr=new int(n);
	//存入数据表示他的顺序
	for(i=0;i<n;i++){
		arr[i]=i+1;
	}
	//删除偶数,保留奇数
	for(i=0;i<n-1;){
		//一直遍历删除,直到只留下一个元素为止
		for(j=0;j<n;j++){
			//不为0表示没有被删除
			if(arr[j]!=0){
				count++;
				//偶数删除
				if(count%2==0){
					arr[j]=0;
					i++;
				}
			}
		}	
	}
	for(i=0;i<n;i++){
		//不为0表示还没被删除
		if(arr[i]!=0){
			cout<<"您要取的扑克牌是第 "<<arr[i]<<" 张"<<endl;
		}
	}
	return 0;
}

 

总结

不知道这个思路是否正确,如果有错误,还希望各位大佬能够批评指正。 


http://www.kler.cn/a/233978.html

相关文章:

  • JVM实战—2.JVM内存设置与对象分配流转
  • golang标准库SSH操作示例
  • 华为管理变革之道:管理制度创新
  • 大数据-256 离线数仓 - Atlas 数据仓库元数据管理 正式安装 启动服务访问 Hive血缘关系导入
  • 2024-12-24 NO1. XR Interaction ToolKit 环境配置
  • 重温设计模式--代理、中介者、适配器模式的异同
  • 算法学习——LeetCode力扣栈与队列篇2
  • 【JavaScript】对象的属性和方法
  • python-分享篇-GUI界面开发-PyQt5-对QListWidget表格进行数据绑定
  • 小兔鲜项目网页版
  • STL之list容器的介绍与模拟实现+适配器
  • 【C语言】指针专项练习 都是一些大厂的笔试真题 附有详细解析,带你深入理解指针
  • kubernetes镜像仓库harbor
  • WebSocketServer+redis实时更新页面数据
  • 北斗卫星在物联网时代的应用探索
  • 【漏洞复现】狮子鱼CMS某SQL注入漏洞
  • std::vector<cv::Mat>和unsigned char** in_pixels 互相转换
  • 一周学会Django5 Python Web开发-Django5创建项目(用PyCharm工具)
  • 【翻译】Processing安卓模式的安装使用及打包发布(内含中文版截图)
  • 酷开科技荣获消费者服务平台黑猫投诉“消费者服务之星”称号
  • 任意IOS16系统iPad/Iphone开启台前调度
  • OpenCV-35 查找轮廓
  • Nginx 配置 SSL证书
  • 【JavaScript】数组的创建和操作
  • Xampp中Xdebug的安装使用
  • 大数据思考:面对海量数据时,选择哪种模式才是更适合自己的?