public class Demo {
/*
* 有100个人围成一个圈,从1开始报数,报到14的这个人就要退出。
* 然后其他人重新开始,从1报数,到14退出。
* 问:最后剩下的是100人中的第几个人?
*/
public static void main(String[] args) {
//创建一个集合将要数数的100个添加
ArrayList<Integer> alPersons=new ArrayList<Integer>();
for(int i=1;i<=100;i++){
alPersons.add(i);
}
//创建一个集合获取所有退出的人
ArrayList<Integer> outPersons=getOutPerson();
//从所有人的集合中将退出人的集合删除
//即把所有的退出的人给删除掉了
//集合中所留下的就是没有删除的人
alPersons.removeAll(outPersons);
//对集合进行迭代
for(Iterator<Integer> itea=alPersons.iterator();itea.hasNext();){
System.out.print(itea.next()+" ");
}
}
public static ArrayList<Integer> getOutPerson(){
//创建一个临时的集合中于将数到14的这个人添加到集合中
ArrayList<Integer> tempList=new ArrayList<Integer>();
//记录每个人数到的数
int count=0;
for(int i=1;i<=100;i++){
count++; //循环一次,记录一次别人数到的数
while(tempList.contains(i)){
i++; //如果集合中已经存在了这个数字就往下一个进行判断
//直到集合中不包含这个数时循环退出
if(i==101){
//如果判断到了第100个人就从第一个人重新开始判断
i=1;
}
}
if(count%14==0){
//如果计数器记录到了14
//就把数到第14的这个人添加到集合中
tempList.add(i);
count=0; //把计数器置为0从1重新开始数
}
if(i==100){
//如果是第100个人在数
//就从第1个重新开始数
i=1;
}
if(tempList.size()>86){
//如果集合的长度是86则存储的数据其实是存储了87个
//角标是从0开始的。
break; //循环结束
}
}
return tempList;
}
}
《黑马程序员》 java算法练习题
最新推荐文章于 2022-12-08 15:59:50 发布