题目:
100只猴子做成一个圈,从1开始报数,报到第14的那只猴子退出圈外,并重新开始计数。依次循环下去,直到圈中只剩下一只猴子,就是大王。
这个问题其实是一个特例,将其中的100和14换成变量 n 和 m ,就是约瑟夫环问题。
思路:
利用链表来解决,每一只猴子的标号存入到链表的一个节点中,将这些节点组成一个链表。为了让它围成一个圈,编程的时候需要稍微处理一下,用一个迭代器指示每次到达链表尾部的时候,又重新轨道链表的头部。
代码:
import java.util.Iterator;
import java.util.LinkedList;
public class monkey {
public static void main(String[] args) {
int cnt=100;
int num=0;
LinkedList<Integer> monkeys=new LinkedList<Integer>();
for(int i=1;i<=100;i++){
monkeys.add(i);
}
Iterator<Integer> it=monkeys.iterator();
while(cnt>1){
if(it.hasNext()){
num++;
it.next();
}else{
it=monkeys.iterator();
}
if(num==14){
it.remove();
cnt--;
num=0;
}
}
System.out.println(monkeys.getFirst());
}
}