java约瑟夫环,谁能解释下这个算法!

[复制链接]
查看11 | 回复3 | 2010-5-18 03:01:16 | 显示全部楼层 |阅读模式
public class YSF {



/**

* 约瑟夫环

* @param m数到m退出

* @param n共有n个人

* @param k从第k个开始数

* @return

*/

private static int ysf(int m, int n, int k) {

int result = 0;

for (int i = 2; i <= n; i++) {

result = (result + m) % i;

}

return result + k % n;

}

public static void main(String[] args) {

System.out.println(ysf(3, 500, 1));

}
}
原题是:2.有500个小朋友拉成一个圆圈,从其中一个小朋友开始依次编号1-500,从1号小朋友开始报数,数到三的退出,问最后剩下的是编号为几!
望能详解,望添上注释!

回复

使用道具 举报

千问 | 2010-5-18 03:01:16 | 显示全部楼层
the ring of Josephus 的经典解法是动态规划 J(x) = (J(x-1) + x)%m这里就是这个算法
回复

使用道具 举报

千问 | 2010-5-18 03:01:16 | 显示全部楼层
噢?循环着数直到只剩下一只可怜的孩子哇。。 哦了
回复

使用道具 举报

千问 | 2010-5-18 03:01:16 | 显示全部楼层
好难。。没看懂。。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行