约瑟夫环问题


引用:http://www.cppblog.com/guyuecanhui/articles/76443.html

问题描述:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列,求最后一个出列人的编号。

代码:

#include <stdio.h>

int josephus(int n, int m, int start)
{
    int k = 1;
    for(int i=2; i<=n; i++)
    k = (k+m-1)%i + 1;
    return (k+start-1) % n;
}

int main(void)
{
    printf("%d\n", josephus(6, 3, 1));
    return 0;
}
原文地址:https://www.cnblogs.com/wouldguan/p/2945839.html