假设一群人排成一圈,编号从1开始。1号从数字1开始报数,报到数字3的人退出,下一个人继续从数字1开始报数。依次进行直到留下最后一个人,求出此人的编号。
整体代码如下:
public class Count {
public static void main(String [] args) {
System.out.print("请输入人数:");
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
boolean[] arr = new boolean[n];
for(int i=0;i<arr.length;i++) {
arr[i] = true;
}
int count = n;
int num = 0;
int index = 0;
while(count > 1) {
if(arr[index] == true) {
num++;
if(num == 3) {
num = 0;
arr[index] = false;
count--;
}
}
index++;
if(index == n) {
index = 0;
}
}
for(int i=0;i<n;i++) {
if(arr[i] == true) {
System.out.println("最终留下的人为"+(i+1)+"号");
}
}
}
}
可设置参数,输入一个数a,报到a的人退出,则:
public class Count {
public static void main(String [] args) {
System.out.print("请输入人数:");
@SuppressWarnings("resource")
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
boolean[] arr = new boolean[n];
for(int i=0;i<arr.length;i++) {
arr[i] = true;
}
System.out.print("请输入退出者所报号数:");
int a = sc.nextInt();
int count = n;
int num = 0;
int index = 0;
while(count > 1) {
if(arr[index] == true) {
num++;
if(num == a) {
num = 0;
arr[index] = false;
count--;
}
}
index++;
if(index == n) {
index = 0;
}
}
for(int i=0;i<n;i++) {
if(arr[i] == true) {
System.out.println("最终留下的人为"+(i+1)+"号");
}
}
}
}