package com.itheima;
import java.util.ArrayList;
/**
* 有100个人围成一个圈,从1开始报数,报到14的这个人就要退出。
*
* 然后其他人重新开始,从1报数,到14退出。问:最后剩下的是100人中的第几个人?
*
* @author liuwei
*
*/
/*
* 分析: 使用arrayList集合比较方便,arraylist 是有序的,可以通过序号的判断,来判断是不是需要退出;
*/
public class Test10 {
public static void main(String[] args) {
// 创建 集合对象
ArrayList<Integer> arr = new ArrayList<Integer>();
// 向集合中添加元素
for (int x = 1; x <= 100; x++) {
arr.add(x);
}
// 用于记录报数的
int count = 0;
// 用于记录报数到哪一个人的
int index = -1;
// 用于记录退出人数的
int removeTime = 0;
while (true) {
count++;
index++;
if (count >= 14) {
count = 0;
// 控制台输出移除的数字
// System.out.println(arr.get(index));
arr.remove(index);
// 移除以后,后面的元素自动进位,此时的索引的位置应该 -1
index--;
// 记录移除的次数
removeTime++;
}
if (index >= (arr.size() - 1)) {
index = 0;
}
if (removeTime >= 99) {
break;
}
}
// System.out.println("---------------");
// 经过 99 次移除以后,集合中现在只剩下一个元素,也就是想要的元素
System.out.println(arr.get(0));
}
}
[学习交流] 围圈报数(约瑟夫环)的最简代码——7条语句 [复制链接] |
872 Bytes, 下载次数: 112
默默默默 发表于 2016-11-9 12:38
这个很难,到现在都没整出来
poi1234bnm 发表于 2016-11-9 21:59
不错哦。。他们想的都是用个链环做。。还是用集合,数组更容易理解。。。运行结果怎么样?? ...
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) | 黑马程序员IT技术论坛 X3.2 |