早教吧 育儿知识 作业答案 考试题库 百科 知识分享

求java代码是《约瑟夫环问题-猴子选大王》[问题描述]一堆猴子都有编号,编号是1,2,3...m,这群猴子(m个)按照1-m的顺序围坐一圈,从第1开始数,每数到第N个,该猴子就要离开此圈,这

题目详情
求java代码是《约瑟夫环问题-猴子选大王》
[问题描述]
一堆猴子都有编号,编号是1,2,3 ...m ,这群猴子(m个)按照1-m的顺序围坐一圈,从第1开始数,每数到第N个,该猴子就要离开此圈,这样依次下来,直到圈中只剩下最后一只猴子,则该猴子为大王。
[基本要求]
1. 熟练设计双向循环链表并实现插入、删除、遍历等接口函数;
2. 设计出简单界面,实现用户参数输入和结果输出;
3. 设计函数,实现循环删除第N个猴子,剩下的最后一个是大王;
4. 设计结束后,按要求撰写课程设计报告。
[设计进度]
第1~2天:
讲解课程设计的内容及课题的设计思路,要求学生根据所选题目查阅相关资料,设计出合适的双向循环链表,实现插入、删除、遍历等接口函数。
第3 天:
进行界面设计,并设计出循环删除的函数;界面示例如下:

第4 天:
添加响应事件,在事件中计算出最终结果并显示。响应时间为:当输入密码后,按回车键时,输出最后的序号及出队序列。
第5 天:
测试程序,撰写实践报告。
检查学生的设计,进行课程设计答辩,结合学生的设计情况、学生的出勤情况、课设报告的书写,以及答辩的成绩一起得出学生的课设成绩。
▼优质解答
答案和解析
无界面!
import java.util.LinkedList;
import java.util.List;
import java.util.Scanner;
public class LinkCircle {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in = new Scanner(System.in);
int n, k, m, i, j, count, p, q;
int[] a = new int[100];
List array = new LinkedList();
p = 0;
q = 0;
count = 0;
n = in.nextInt();
m = in.nextInt();
for (i = 0; i < n; i++) {
array.add(i + 1);
System.out.printf(i != n - 1 ? "%d " : "%d\n", array.get(i));
}
int pos = -1;
int x = 0;

while(array.size() != 1)
{
//x = array.get(pos);

pos += m ;
if(pos >= array.size())
{
pos = pos % array.size();
}
System.out.println("remove pos:" + (pos + 1) + ", value:" + array.get(pos));

array.remove(pos--);
System.out.print("Array : ");
for (i = 0; i < array.size(); i++) {
System.out.printf(i != array.size() - 1 ? "%d " : "%d\n\n", array.get(i));
}
}
System.out.println("res:" + array.get(0));
}
}