用java解决如下问题 有10个同学手拉手围成一圈,从第一个同学开始计数。每数到3去掉一个同学,剩余同学继续围成一圈,从下一个同学开始重新计数。依此类推,直到剩下最后一个同学为止。编程确定最后一个同学的编号。要求输出结果如下图。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这不是约瑟夫环吗import java.util.*;public class JOSEPH_PROBLEM{ /** *递归法 *@param loop 每次数数循环的最大值,数到此数的元素需要退出出链表 *@param size 链表的大小,即有几个人 *@param list 每次数数时的新链表 *@param begin 每次数数开始的位置节点 */ public static void resolve(List<Node> list,int size, int loop,Node begin){ Node temp = begin; if(size > 1){ for(int i = 0; i < loop; i++){ begin = begin.getNext(); } for(int i = 0; i < loop - 2; i++){ temp = temp.getNext(); } System.out.println(temp.getNext()); list.remove(temp.getNext()); temp.setNext(begin); resolve(list,list.size(),loop,begin); }else{ System.out.println(list.get(0)); } } //测试main方法!! public static void main(String[] args){ int count = 0; int loop = 0; System.out.println("请输入人数:"); Scanner input = new Scanner(System.in); count = input.nextInt(); System.out.println("请输入循环数:"); loop = input.nextInt(); List<Node> list = Node.generator(count); Node begin = list.get(0); JOSEPH_PROBLEM.resolve(list, count, loop, begin); }}class Node{ private Node next; private static int data = 1; private final int COUNT = data++; public Node getNext(){ return next; } public void setNext(Node next){ this.next = next; } public String toString(){ return COUNT+"";//+" :"+next; } public static List<Node> generator(int count){ List<Node> list = new LinkedList<Node>(); Node node = new Node(); list.add(node); for(int i = 0; i < count-1; i++){ Node next = new Node(); list.add(next); list.get(i).setNext(next); } list.get(count-1).setNext(node); return list; }}很久之前写的一个算法,只是单纯的实现了,没考虑最优化问题 循环链表 一下就就解决了。LinkList http://topic.csdn.net/u/20120627/20/4f300b35-b616-4d3d-8a22-e5313f9fc3cb.html 不能在指的路径中输出肉容 突发奇想,大家来讨论一下吧,怎样增加操作符的用法 请大家帮忙看看是子类还是父类的对象,初学不太懂 执行ResultSet.next()方法时,为什么还不断访问数据库啊。急!!! 将数据显示到JTable中 小弟我学JAVA遇到瓶颈请高手指点一下??? 关于对象克隆的问题!!!高分!!!! 求救!!!初学者!!1 看过《数据结构与算法》(java版)谈谈一下感想? 关于tomcat4的问题 java 识别计算机中的硬盘和可移动存储设备 J2SE JPanel的缩放问题
/**
*递归法
*@param loop 每次数数循环的最大值,数到此数的元素需要退出出链表
*@param size 链表的大小,即有几个人
*@param list 每次数数时的新链表
*@param begin 每次数数开始的位置节点
*/
public static void resolve(List<Node> list,int size, int loop,Node begin){
Node temp = begin;
if(size > 1){
for(int i = 0; i < loop; i++){
begin = begin.getNext();
}
for(int i = 0; i < loop - 2; i++){
temp = temp.getNext();
}
System.out.println(temp.getNext());
list.remove(temp.getNext());
temp.setNext(begin);
resolve(list,list.size(),loop,begin);
}else{
System.out.println(list.get(0));
}
}
//测试main方法!!
public static void main(String[] args){
int count = 0;
int loop = 0;
System.out.println("请输入人数:");
Scanner input = new Scanner(System.in);
count = input.nextInt();
System.out.println("请输入循环数:");
loop = input.nextInt();
List<Node> list = Node.generator(count);
Node begin = list.get(0);
JOSEPH_PROBLEM.resolve(list, count, loop, begin);
}
}class Node{
private Node next;
private static int data = 1;
private final int COUNT = data++;
public Node getNext(){
return next;
}
public void setNext(Node next){
this.next = next;
}
public String toString(){
return COUNT+"";//+" :"+next;
}
public static List<Node> generator(int count){
List<Node> list = new LinkedList<Node>();
Node node = new Node();
list.add(node);
for(int i = 0; i < count-1; i++){
Node next = new Node();
list.add(next);
list.get(i).setNext(next);
}
list.get(count-1).setNext(node);
return list;
}
}很久之前写的一个算法,只是单纯的实现了,没考虑最优化问题