import java.util.ArrayList;
import java.util.Iterator;
/**
* 第10题:有100个人围成一个圈,从1开始报数,报到14的这个人就要退出。然后其他人重新开始,
* 从1报数,到14退出。问:最后剩下的是100人中的第几个人?
*
* @author
*
*/
public class Test10 {
public static void main(String[] args){
//将100个人从1到100按顺序添加到ArrayList集合中
ArrayList<Integer> List = savaPeople();
//获取最后剩下的是100人中的某人
int newList = getLastPeople(List);
System.out.println("最后剩下的是100人中的第("+newList+")个人");
}
//将100个人从1到100按顺序添加到ArrayList集合中
public static ArrayList<Integer> savaPeople(){
//创建一个ArrayList集合用来存储这100个人
ArrayList<Integer> List = new ArrayList<Integer>();
//按照顺序从1到100加入到List集合中
for(int i = 1 ; i < 101 ; i++)
{
List.add(i);//添加人
}
//返回已存储了100人的ArrayList集合
return List;
}
//获取最后剩下的是100人中的某人
public static int getLastPeople(ArrayList<Integer> List){
//定义一个计时器
int count = 0;
//该循环的意思是,将这个集合当作是一个圆。每次遍历数数,数到14,就将该元素从集合中删除。
//然后从删除后的元素的后一位从1再开始数,再数到14后删除。以此类推,直到集合中只剩下一个元素,则退出循环
while(List.size()!=1)
{
//创建一个迭代器,用来遍历该集合
Iterator<Integer> itr = List.iterator();
//判断是否到集合末尾,没到则继续遍历
while(itr.hasNext())
{
//每次循环定时器加一
count++;
int element = itr.next();//找到下一个元素
//如果数到第14个元素,则将该元素从集合中删除。计时器再清零,重新计算
if(count%14==0)
{
itr.remove();//将该元素从集合中删除
count=0;//计时清零
}
}
}
//返回在该集合中最后的一个元素
return List.get(0);
}
}
|
|