黑马程序员技术交流社区
标题:
分享入学测试----有100个人围成一个圈,从1开始报数。。。
[打印本页]
作者:
fluency
时间:
2015-1-19 16:49
标题:
分享入学测试----有100个人围成一个圈,从1开始报数。。。
package com.itheima;
import java.util.LinkedList;
/**
* @author Mr 10、
* 有100个人围成一个圈,从1开始报数,报到14的这个人就要退出。然后其他人重新开始,从1报数,到14退出。问:最后剩下的是100人中的第几个人?
*/
public class Test10 {
public static void main(String[] args) {
// 因为频繁删除所以用LinkedList
LinkedList<Integer> nums = new LinkedList<Integer>();
for (int i = 1; i <= 100; i++) {
nums.add(i);
}
System.out.println(nums);
int flag = 0;
loop: while (true) {// 将普通队列模拟成循环队列结构,并定义跳出点,开始遍历循环队列
for (int i = 0; i < nums.size(); i++) {
Integer num = nums.get(i);
if (++flag == 14) {// 如果是计数第14个 删除该元素
nums.remove(num);
i--;// 元素减少一个 ,循环指针跟着动
System.out.println("删除:" + num);
System.out.println("剩余:" + nums);
flag = 0;// 计数归零
if (nums.size() == 1)
break loop;
}
}
}
}
}
复制代码
作者:
fluency
时间:
2015-1-24 15:20
感谢加分
作者:
丶北京青年
时间:
2015-1-24 23:03
谢谢分享{:2_32:}
作者:
SanYong
时间:
2015-1-26 09:19
谢谢分享
作者:
Strong
时间:
2015-1-26 11:04
楼主面试没有?
作者:
以利亚
时间:
2015-1-30 10:14
感谢分享
作者:
18942668193
时间:
2015-1-30 18:53
感谢分享
作者:
提米特
时间:
2015-2-17 10:13
你的程序我运行了一下,结果是错误的。
问题在于你理解题目有问题,题目中说,如果遇到14就将这个人移除,然后其他人
重新开始
所以先不管程序,退出的人应该是14,15,16,17……100,即从14号开始退出,然后重新开始数则原来的15号变成了14号,依次类推,所以首先是14号到100号逐一退出。
希望楼主再接再厉!
作者:
彭春晓
时间:
2015-3-20 22:26
感谢分享,又学到了新东西,。谢谢
作者:
wkz_crystal
时间:
2015-3-21 18:42
这个题目有意思……这种循环思想挺牛了,主要是控制好指针flag,就好理解了……
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2