约瑟夫环问题


引用: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;
}
posted @ 2013-03-06 12:37  wouldguan  阅读(167)  评论(0编辑  收藏  举报