algorithm - Josephus p‌r‌o‌b‌l‌e‌m 中的消除顺序

标签 algorithm math recursion josephus

约瑟夫斯问题(或约瑟夫斯排列)是与某种数数游戏相关的理论问题。

People are standing in a circle waiting to be executed. Counting begins at the first point in the circle and proceeds around the circle in a clockwise direction. After a specified number of people are skipped, the next person is executed. The procedure is repeated with the remaining people, starting with the next person, going in the same direction and skipping the same number of people, until only one person remains, and is freed. For example if n=10 then the order of elimination is 2, 4, 6, 8, 10, 3, 7, 1, 9 and 5

The problem is, without simulation of the above game, try to find out the order of 
elimination through means of mathematical formula or a mathematical pattern.

最初我们得到 n,即开始时圈子中的人数。记住上述条件和限制,给出消除顺序。

简单来说,打印死亡模式而不使用任何数据结构,如数组和链表。

最佳答案

学习后准备了解决方案http://www.cs.man.ac.uk/~shamsbaa/Josephus.pdf . 这个递归在上面的pdf中有提到。

int last_man(int n,int x)
{
    if(n==1 && x==1)
        return 1;
    else if(n>1 && x==1)
        return 2;
    else if(last_man(n-1,x-1)==n-1)
        return 1;
    else
        return last_man(n-1,x-1)+2;
}

X 表示第 x 个死亡的人,n 是最初的总人数。 对从 1 到 n 的所有 x 值循环此函数,即可得出消除顺序。

关于algorithm - Josephus p‌r‌o‌b‌l‌e‌m 中的消除顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35160774/

相关文章:

确定不同长度变化的算法

java - 如何递归执行插入排序

JavaScript 递归反向字符串

algorithm - 在数百万用户编辑的音频文件中查找重复内容(音频内容散列)

algorithm - 如何找到完整无向图中的哈密顿循环数?

python - python如何识别参数的类型?

javascript - knockout : Keep track of recursion depth?

javascript - 获取数组中第 n 个最小的数字位置

algorithm - 按求和算法对数字进行排序

计算期间的 C++ 奇怪值