小题~

 /*
有17人围成一圈(编号0-16),从第0号的人开始从1报数,
凡是报到3的倍数的人就主动离开圈子,
然后再数下去(不累计计数,从1计数,直到出圈,重新开始),
直到最后一个人为止,请问最后留下来的人的原来位置是多少号?
*/
public class OneArray{
	public static void main(String[] args) {
		int[] person = getLocation();
		System.out.println("最后的结果如下:(其中,0表示已经离开圈子了,1表示还在圈中)");
		for (int i = 0; i < person.length; i++) {
			System.out.print(person[i] + " ");
			// 寻找哪个人的状态为1,则此人就是一直没有出圈的人,获取此元素的下标,就是此人原来位置的编号
			if (person[i] == 1) {
				System.out.println("这个人的原来位置编号为:" + i);
			}
		}
	}
	public static int[] getLocation() {
		int person[] = new int[17];				// 创建一个由17个人组成的圈子
		for (int i = 0; i < person.length; i++) {		
			// 设置每个人都在圈内的状态为1
			person[i] = 1;
		}
		int i = 0;							// 表示第几个人
		int k = 0;							// 表示报数
		int count = 0;						// 表示出圈的人数
		while (true) {
			i = i % 17;						// 为了确保i的值永远在0~16之间
			if (person[i] == 1) {				// 如果此人还在圈中则报数
				k++;						// 报数加1
				if (k % 3 == 0) {				// 如果报的数是3的倍数
					person[i] = 0;			// 此人的状态改为0,表示此人已经离圈
					count++;				// 离圈的人自动加1
				}
			}
			if (count == 16) {				// 如果已经有16个人离圈,则结束报数
				break;
			}
			i++;
		}
		return person;
	}
}




 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章