虽然目前已经面试结束,但是闲着还是会写写代码,上上论坛,偶然间发现论坛有人问这样一个问题:
有100个人围成一个圈,从1开始报数,报到14的这个人就要退出。
然后其他人重新开始,从1报数,到14退出。问:最后剩下的是100人中的第几个人?
开始自己想办法笔算,最后还是不行,便写了一段Java代码来解决,最后得到结果为92,不知道对不对,感兴趣的可以看下,代码如下:
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;
public class Test7 {
private static List<Integer> list=new ArrayList<Integer>();
public static void main(String[] args) throws Exception{
System.out.println(run(list));
/*Iterator<Integer> it=list.iterator();
while (it.hasNext()) {
Integer i = it.next();
System.out.println(i);
}*/
}
public static Integer run(List<Integer> list){
int count=0;//计数器,用于记录报数
for (int i = 1; i <101 ; i++) {
//报数之前,应先判断此编号的人是否有报数资格,即容器是否包含之
if (!list.contains(i)) {
count++;//报数
//每报到14的整数倍,清除此编号人员的报数资格,即加入容器
if (count%14==0) {
//System.out.println(count);
list.add(i);
}
}
//返回最后一个报数的人
if ((list.size()==99)&&(count%14==1)) {
//System.out.println(i);
return i;
}
//当到末尾时,设置循环控制到开头,形成“圈”。
if (i==100) {
i=0;
}
}
return null;
}
} |