【王道JAVA】【程序 37 报数】
作者:互联网
题目:有 n 个人围成一圈,顺序排号。从第一个人开始报数(从 1 到 3 报数),凡报到 3 的人退出圈子,问最后留下的是原来第几号的那位。
import java.util.Scanner;
public class WangDao {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.print("Input the n: ");
int n = scan.nextInt();
boolean[] isIn = new boolean[n]; // 用布尔型数组来标记是否在圈内。
for (int i = 0; i < isIn.length; i++) {
isIn[i] = true;
}
int inCircle = n, index = 0, number = 0; // 圈内人数,指标,报数。
while (inCircle > 1) { // 圈内人数剩下1人时退出。
if (isIn[index]) {
number++;
if (number == 3) { // 报数到3时。
number = 0; // 重新报数。
isIn[index] = false; // 标记退圈。
inCircle--; // 圈内人数扣1个。
}
}
index++; // 指标每轮加1. 不可写成isIn[index++],因为if内也要用到index,不能提前更变。
if (index == n) { // 如果数到最后一号,重头再遍历。
index = 0;
}
}
for (int i = 0; i < isIn.length; i++) {
if (isIn[i]) { // 遍历到未标记退圈的号数加1,就是活着的人。
System.out.println("Last one is " + (i + 1));
}
}
}
}
标签:index,JAVA,++,37,number,int,isIn,报数 来源: https://blog.csdn.net/YelloJesse/article/details/89431309