黑马程序员技术交流社区
标题:
有100个人围成一个圈,从1开始报数,报到14的这个人就要...
[打印本页]
作者:
戏言丶
时间:
2014-11-1 15:13
标题:
有100个人围成一个圈,从1开始报数,报到14的这个人就要...
这道题我看过不少的解答思路,也都不错,但是我觉得有些太繁琐,运用递归可以比较简练,但是递归相对来说效率不是很高。所以我运用了集合迭代的办法,以下是我的代码。如果你数学好的话完全可以不需要集合、数组这些,也就是一个公式就能搞定,五六行代码就行。。。
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)+"个人");
}
}
复制代码
作者:
冥夜
时间:
2014-11-1 15:43
分享试题了啊- -
作者:
jeromechen
时间:
2014-11-1 18:20
关键是迭代器还比较容易懂和简单,效率也不错,赞一个
作者:
戏言丶
时间:
2014-11-3 01:44
jeromechen 发表于 2014-11-1 18:20
关键是迭代器还比较容易懂和简单,效率也不错,赞一个
我自己写的觉得很容易理解,谁知道你们也觉得易懂,那这方法还是不错的:lol
作者:
hanxing
时间:
2014-11-4 10:13
简洁明了.方便实用,楼主威武
作者:
yaodd321
时间:
2014-11-4 10:38
楼主的方法容易理解 ,赞一个
作者:
绝版坏银
时间:
2015-6-11 15:01
为什么n 这个变量全部删掉之后,运行会报错
作者:
许佳鑫
时间:
2015-11-20 13:19
赞一个。。。。。。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2