2024年春晚魔术代码

标签: 代码

HanqinWu 2025-10-10 15:08:52

% 北大数学揭秘刘谦魔术, 它实际上是约瑟夫(josephus)问题的一个特例

% 北太天元给出一般的约瑟夫问题的求解

% 例如

% 男生对应的是 josephus(7,2), 目标牌在第7个,因此

% josephus(7,2) 看到退出的牌的次序是 2 4 6 1 5 3 7 , 

% 恰好最后一张牌是 7

% 男生对应的是 josephus(6,2) , 目标牌在第五个

% 女生对应的是  josephus(5,2) , 目标牌X 在第三个

function result = josephus(n, m)

    if(nargin <2)

        n = 7;

        m =2;

    end

    if n < 1 || m < 1

        result = [];

        return;

    end

    

    % 创建一个1到n的向量表示围成一圈的人

    people = 1:n; % 编号从0到n-1

    result = []; % 用于存储每次出圈人的顺序

    index = 1; % 从第一个人开始报数

    

    while ~isempty(people) % 当还有人在圈中时

        % 计算要移除的人的索引位置(考虑循环计数的特性)

        index = mod(index - 1 + m, length(people));

        if(index == 0)

            index = length(people);

        end

        % 将出圈的人添加到结果中,并从圈中移除

        result = [result, people(index)];

        people(index) = [];

    end

end

声明:当年跟老师一块弄的。

回复

回复

重置 提交