约瑟夫问题是个有名的问题:N个人围成一圈,从第一个开始报数,第M个将被杀掉,最后剩下一个,其余人都将被杀掉。例如N=6,M=5,被杀掉的顺序是:5,4,6,2,3,1。由于在Java语言中,使用链表来实现非常简单。请完成代码,实现相应输出。
裁判测试程序样例:
import java.util.LinkedList;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int a=sc.nextInt();
int b=sc.nextInt();
sc.close();
LinkedList<Integer> list = new LinkedList<Integer>();
/* 请在这里填写答案 */
System.out.println(list.getFirst());
}
}
输入样例
21 4
输出样例:
4 8 12 16 20 3 9 14 19 5 11 18 6 15 2 17 10 7 13 1 21
for (int i = 0; i < a; i++) {
list.add(i+1);
}
int count = 1; //报数
while(list.size() > 1) {
if(count == b) {
count = 1;
System.out.print(list.pop() + " ");
}else {
list.add(list.removeFirst()); //把没有移除的元素添加到数组最后再次循环报数
count++;
}
}
博客内容介绍了如何使用Java解决约瑟夫环问题,即N个人围成一圈,每报数到M的人将被排除,直至剩下最后一个人。通过链表实现,详细解释了代码逻辑,并给出了裁判测试程序样例及输入输出示例。
1079

被折叠的 条评论
为什么被折叠?



