B06围圈报数

发布时间 2023-03-22 21:12:58作者: 缕一缕清风

import java.util.Scanner;

public class A06围圈报数 {
// 有n个人围成一圈,顺序排号,从第一个人开始报数(1到3报数),凡报道3的人退出圈子
// 问最后保留的是原来第几号的那位
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("请输入圈中的人数:");
int n=sc.nextInt();
sc.close();
//创建n个格子的数组,默认每个格子的值是0
int[] a=new int[n];
//认为0表示此人在圈,1表示此人以出圈
int count=n;//表示圈中还剩下多少人
int flag=0;//报数变量,报道3的时候,下一次是1
int i=0;//数组的脚标
while (true) {//设计死循环,跳出循环的条件,是count=1,圈中只剩1人的时候
if (count1) {
break; //圈中只剩一人,赶紧跳出循环
}
if (a[i]
0) {
//1.第i个人开始报数
flag++;
if (flag3) {//表示第i个人在圈,在圈里才能报数
//2.如果该人报数为3,把他踢出去
a[i]=1;
flag=0;//为了下一个人报数为1,所以这里要flag置位0
count--;//在圈人数减一
}
}
i++;
if (i
n) {
i=0; //第n-1的后面一个是第0个格子
}
}
for(int j=0;j<a.length;j++){
if (a[j]==0) {
System.out.println("最后留在圈中的是第"+(j+1)+"个人");
}
}
}
}