约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3…n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。通常解决这类问题时我们把编号从0~n-1,最后 结果+1即为原问题的解。
如果还看不懂问题,杨帆兄简单易懂的约瑟夫环
PS:
首先附上代码
这个代码是一共n个人,每次淘汰数到k的个人,问最后剩下的是第几个人
import java.util.Scanner;
public class 约瑟夫环 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt(), k = in.nextInt();
int p = 0;
for (int i = 2; i <= n; i++) {
p = (p + k) % i;
}
System.out.println(p + 1);
}
}
原题是问最后剩下的那个人是几号,可以这么想
按照正常的逻辑是,最后一个淘汰的人是谁,
既然是这样,我们反过来想,
我们可以是开局一个人,
原创文章 1903获赞 3万+访问量 651万+
关注
他的留言板
展开阅读全文
作者:南 墙