2024龙年春晚刘谦魔术数学建模

文章讲述了作者在春节期间用MATLAB模拟刘谦魔术中的牌局过程,包括撕牌、随机插入和Josephus置换等步骤,展示了编程实现的娱乐方式。
摘要由CSDN通过智能技术生成

大年初一退役数学建模er究竟在干啥呢,昨晚看刘谦魔术不舍得撕坏一副好牌,毕竟当时还在打呢

但是我可以用代码模拟啊

看着网上各路大神什么Josephus环啊,线代啊,甚至还有高考数列题(大学生看得津津有味嗷)……各显神通,现在我就用MATLAB实现这样一个过程(完整代码直接放在最后,可能有可以优化的地方,但是毕竟大年初一拜年要紧,大家评论区直接改就行)

首先准备牌嘛,那就\left[a,b,c,d \right ]好了

第一步,撕牌!

第二步,按照名字个数换底,按小尼老师为例,nName = 7;

第三步,前三张随便乱插

然后把第一个一半藏到屁股底下(bushi

第四步,按南北方随便乱插

第五步,男生丢掉1张,女生丢掉2张,这里用的randi(2),这次运行是女生诶

第六步,大声喊出“见证奇迹的时刻”!连换7次

第七步,好运留下来,烦恼丢出去!

这样就有了另一半:

也祝大家幸福快乐地度过每一天!

附上代码:

clear
clc
cards = ['a', 'b', 'c', 'd']'
%% 撕牌
tearStack = [eye(4); eye(4)];
first = char(tearStack * cards)

%% 按名字个数换底
nName = 7;
bottom = [[zeros(7, 1); 1], [eye(7); zeros(1, 7)]];
second = char(bottom ^ nName * first)

%% 前三张插入在第insertPos张后
insertPos = randi([4, 7]);
third = [second(4:insertPos); second(1:3); second(insertPos + 1:end)]

%% 藏好第一半
half1 = third(1)

%% 按南北方插牌
location = randi(3);
insertPos2 = randi([location + 1, 7]);
fourth = [third(location + 1:insertPos2);
          third(1:location);
          third(insertPos2 + 1:end)]

%% 男生丢1张,女生丢2张
gender = randi(2);
fifth = fourth;
fifth(1:gender) = []

%% 见证奇迹的时刻
bottom2 = [[zeros(7 - gender, 1); 1], [eye(7 - gender); zeros(1, 7 - gender)]];
magicMomentWord = 7;
sixth = char(bottom2 ^ magicMomentWord * fifth)

%% 好运留下来,烦恼丢出去:Josephus置换
while length(sixth) > 1
    % 将第一个元素移动到数组末尾
    sixth = [sixth(2:end); sixth(1)];
    % 丢弃现在的第一个元素(原来的第二个元素)
    sixth(1) = []
end
half2 = sixth

%% 见证奇迹!
if half1 == half2
    disp('魔法祈福仪式成功啦,2024一整年幸福快乐地度过每一天!')
else
    disp('春晚重播啦!')
end

第一次写csdn上的博客

  • 11
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值