- /*
- *
- *Test36--有100个人围成一个圈,从1开始报数,报到14的这个人就要退出。
- *然后其他人重新开始,从1报数,到14退出。问:最后剩下的是100人中的第几个人?
- *
- *分析:使用集合来做,这100个人是一个圈,所以到最后一定是剩下一个人
- *本题说是重新开始计数,那么是从最开始的第一人开始计数还是从被删除后那人的后一位接着
- *计数,没有明确说明,本地给出两种解决方案用于这两种不同的情况
- * */
- public class Test36 {
- public static void main(String[] args) {
- //往集合中添加100个数
- List<Integer> list = new ArrayList<Integer>();
- for(int i=1;i<=100;i++)
- {
- list.add(i);
- }
-
- //这种方法说的是删除第14位后原本的15位变为1
- del14_1(list);
-
-
- //这种方法是开始计数的位置永远不变,当第14位被删除后重新从第一位开始计数
- //del14_2(list);
-
-
- }
- private static void del14_2(List<Integer> list) {
-
- int count = 0,number = 1;
-
- //这个集合最后肯定只剩下一个人
- while(list.size()>1)
- {
- //因为每次删除完第14位后都需要重新进行迭代
- Iterator<Integer> it = list.iterator();
- while(it.hasNext())
- {
- count++;
- Integer i = it.next();
- if(count%14==0)
- {
- it.remove();
- //删除掉第14位后计数器计数器清零
- System.out.println("第"+number+++"轮循环被删除的元素是"+i);
- count=0;
- //不是从第15位开始继续计数了,而是跳出循环重新开始迭代该集合
- break;
- }
- }
- }
- System.out.println("最后集合变为:"+list);
- }
-
-
- private static void del14_1(List<Integer> list) {
- //定义计数器,一个用来显示循环了多少轮,一个用来记录第14位
- int count = 0,number = 1;
-
- //这个集合最后肯定只剩下一个人
- while(list.size()>1)
- {
- //因为每次删除完第14位后都需要重新进行迭代
- Iterator<Integer> it = list.iterator();
- while(it.hasNext())
- {
- count++;
- Integer i = it.next();
- if(count==14)
- {
- it.remove();
- //删除掉第14位后计数器从第15位开始计数
- System.out.println("第"+number+++"轮循环被删除的元素是"+i);
- count=0;
- }
- }
- }
- System.out.println("最后集合变为:"+list);
- }
- }
复制代码 |
|