丢手卷问题:假设共有5我的,围成一个圆圈,从1号开始数,每次数4我的,问最后谁没出局? java
将题目中的三个常量换成变量,问谁没出局。。 数组
代码以下: spa
public static void main(String[] args) { // 总共多少人 int total = 5; // 从第几我的开始数 int begin = 3; // 每次数几个 int interval = 2; // 构造出数组 // 元素的值就是它的在数组中的第几个。 // 当一我的出局,数组对应位置 置0. int[] array = new int[total]; for (int i = 0; i < array.length; i++) { array[i] = i + 1; } // 默认剩下total我的。 int rest = total; // 记录当前位置 int index = begin - 1; // 已经数了几个数了。 int count = 0; while (true) { // 判断下标是否越界,当下标达到数组长度时,下标清零,从而造成循环。 if (index >= array.length) { index = index - array.length; } //被清零的数组元素就说明已经出局了。换下一个数。 if (array[index] != 0) { // 当前位置不是0, // 能够计数 count++; //判断是否数够了。 if (count == interval) { // 数够了。 System.out.println("出局的数是:" + array[index]); //下轮从新计数 count = 0; //出局的对应的位置清零。 array[index] = 0; //剩下几我的没出局呢。 rest--; //还有一我的没出局 if (rest == 1) { // 剩下一个数了。 //只能遍历数组找谁剩下了(非零),此时index记录的是谁出局的, break; } else { index++; } } else { // 没计数够呢,算下一个数。 index++; } } else { // 当前位置的元素值是0,换下一个数。 index++; } } //遍历数组找谁剩下了(非零) for (int i = 0; i < array.length; i++) { if (array[i] != 0) { // array[index]即为最后剩下的人。 System.out.println("剩下的数是:" + array[i]); } } }