今天寫了定丟手卷的編程題,試了一小時,也寫出來 了。

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

	}
相關文章
相關標籤/搜索