本帖最后由 崔小旭 于 2016-7-21 13:29 编辑
package com.heima;
import java.util.ArrayList;
import java.util.Iterator;
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
ArrayList<Integer> al = new ArrayList<Integer>();//新建一个集合,用于存储这100个人
for(int i = 1; i<=100; i++){//给集合添加元素
//添加到集合
al.add(i);
ArrayList<Integer> newAl = new ArrayList<Integer>();//新建一个集合,用于存储每次退出的那个人
newAl = getQuit();//通过调用getQuit()方法,给集合添加元素
al.removeAll(newAl);//所有人的集合减去退出的集合,就获得最后剩下没有退出的那13个人
}
for(Iterator<Integer> it = al.iterator(); it.hasNext();){//迭代取出集合的元素
System.out.print(it.next()+" ");//打印集合的元素
}
}
private static ArrayList<Integer> getQuit() {//创建一个方法,用于获取每次退出的那个人的角标
ArrayList<Integer> newAl = new ArrayList<Integer>();//新建一个集合,用于存储退出的角标
int count = 0;//定义一个计数器,记录数数的值
//因为是一个圆圈,假定把这个圆圈拉直,把N个这样的直线连起来,就相当于永远在圆圈转圈。
for(int i = 1; i<101; i++){//因为有100人,定义一个循环次数为100的循环,i为每个人的角标
count++;//记录索引值
while(newAl.contains(i)){//判断集合是否已经添加了i
i++;//如果集合中已有那个元素,就往后加一个,再判断,直到集合中没有那个元素结束
if(i==101){//如果是第100个人的话,就从1开始
i = 1;
}
}
if(count%14==0){//如果计数器数到14,就将i添加到集合
newAl.add(i);//把这个元素加到集合去
count = 0;//把计数器置0;重新计数
}
if(i==100){//当数到第100个人的时候
i=1;//把索引置为1,1开始接着数。
}
if(newAl.size()>86)//循环终止条件:当圈子中剩余13个元素,也就是集合里面已经添加了87个就退出循环
break;//退出循环
}
return newAl;//
}
} |