丟手卷問題:假設共有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]); } } }