这道题主要的思路就是模拟报数的过程,
我们首先用boolean类型数组来储存N个人的状态,true代表还在圈中,false代表出圈了。
具体为:
1.创造一个N个元素的boolean类型数组,然后用for循环对每个元素进行初始化,使每个元素都为true,
2.定义一个sum变量为N来存储当前还有多少人在圈中,定义一个count来模拟每次报数到3 就有人出圈,定义一个index 来记录当前数组的下标。
3.首先用一个while循环来判断当前圈里面还有几个人 ,如果不大于1 说明还在圈子这个人被找到了,然后紧跟着一个if判断 只让元素为true的进去,相当于只看圈子里面的人。 接下来让count++,然后再判断count的值 如果能除3没有余数 说明这次的数组元素要改为false,就代表这个出圈了, 最后让index++,去判断下一个人。如果index == n, 就代表这轮已经判断完毕了,让index = 0,再进行一轮判断,
4.循环数组 找出值为true的元素。
具体代码为:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
boolean arr[] = new boolean[n];
for(int i = 0; i < arr.length;i++) {
arr[i] = true;
}
int sum = n;
int count = 0;
int index = 0;//数组下标
while(sum > 1) {
if(arr[index] == true) {
count++;
if(count % 3 == 0) {
arr[index] = false;
count = 0;
sum --;
}
}
index++;
if(index == n) {
index = 0;
}
}
for(int i = 0; i < n; i++) {
if(arr[i] == true) {
System.out.println(i + 1);
}
}
}
}