这道题我看过不少的解答思路,也都不错,但是我觉得有些太繁琐,运用递归可以比较简练,但是递归相对来说效率不是很高。所以我运用了集合迭代的办法,以下是我的代码。如果你数学好的话完全可以不需要集合、数组这些,也就是一个公式就能搞定,五六行代码就行。。。
- import java.util.ArrayList;
- import java.util.Iterator;
- /**
- * 题目:有100个人围成一个圈,从1开始报数,报到14的这个人就要退出。然后其他人重新开始,从1报数,到14退出。问:最后剩下的是100人中的第几个人?
- * 思路:
- * 1、创建一个集合,依次往集合中存入1到100的数;
- * 2、遍历集合,当遍历集合中元素的次数是14的整数倍时将这个数从集合中移除;
- * 3、重复上述步骤,直到集合的长度为1,剩下的数就是所需的第几个人。
- * @author xinpeng
- *
- */
- public class NumberDemo{
- public static void main(String[] args) {
- //创建List集合
- ArrayList<Integer> al = new ArrayList<Integer>();
- //循环往集合中添加1-100的数据
- for(int i=1;i<=100;i++){
- al.add(i);
- }
-
- //初始化遍历集合中元素的次数
- int count = 0;
- int n = 0;
- //当集合的长度大于1时继续遍历集合中的元素
- while(al.size()>1){
- //获取最新集合的迭代器
- Iterator<Integer> it = al.iterator();
- while(it.hasNext()){
- n = it.next();
- count++;
- //当遍历集合中元素的次数是14的整数倍时将该元素移除出集合
- if(count%14==0){
- System.out.println("当前删除的元素是:"+n);
- it.remove();
- }
- }
- }
- System.out.println("最后剩下的是100人中的第"+al.get(0)+"个人");
- }
- }
复制代码
|