/* 有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; } }
小题~
最新推荐文章于 2022-10-09 18:33:08 发布