快速查找约瑟夫问题的最后活体编号
Posted loremwalker
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了快速查找约瑟夫问题的最后活体编号相关的知识,希望对你有一定的参考价值。
放弃使用链表描述问题过程的方式编写代码,采用具体数学分析推导实现实现该功能
import org.junit.Test;
/**
* @author lorem
*/
public class SuicidalGameTest {
@Test
public void test() {
System.out.println(survivor(41, 3));
System.out.println(survivor(3L, 3));
}
private long survivor(int n, int m) {
int sum = 0;
for (int i = 2; i <= n; i++) {
sum = (sum + m) % i;
}
return ++sum;
}
private long survivor(long n, int m) {
if (n < 1 || m < 1) {
return -1;
}
if (n == 1) {
return 1;
}
return (survivor(n - 1, m) + m - 1) % n + 1;
}
}
参考链接:
- https://www.youtube.com/watch?v=fZ3p2Iw-O2I
- https://zlearning.netlify.com/math/concretemath/josephus
以上是关于快速查找约瑟夫问题的最后活体编号的主要内容,如果未能解决你的问题,请参考以下文章