今天写了定丢手卷的编程题,试了一小时,也写出来 了。

丢手卷问题:假设共有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]);
			}
		}

	}
相关文章
相关标签/搜索