- import java.util.ArrayList;
- /*
- * 【程序37】
- 题目:有100个人围成一圈,顺序排号。
- 从第一个人开始报数(从1到14报数),
- 凡报到14的人退出圈子,问最后留下的是原来第几号的那位。
- */
- public class Test {
- public static void main(String[] args) {
- int num = getPos(100, 14);
- System.out.println(num);
- }
- public static int getPos(int numbers, int key) {
- // 集合接收每一个人
- ArrayList<Integer> list = new ArrayList<Integer>();
- // 编号
- for (int i = 1; i <= numbers; i++) {
- list.add(i);
- }
- // 计数器,记录报数的次数
- int count = 0;
- // 集合索引
- int index = 0;
- // 当集合长度不等于1的时候循环
- while (list.size() != 1) {
- // 计数器工作
- count++;
- // 每当遍历到队列最后一个人的时候,索引从头开始,
- // 条件为索引>集合长度-1(或索引=集合长度)
- if (index > (list.size() - 1)) {
- index = 0;
- }
- // 每key个人退出,退出后index不动,所以退出进行下一次循环,
- if (count % key == 0) {
- list.remove(index);
- continue;
- }
- // 没有人退出的时候索引+1
- index++;
- }
- // 最后的人是
- return list.get(index); //此时index=0
- }
- }
复制代码
|
|