思路
- 循环只有当剩下1人时结束
- 只有当j下标的人的值不为0时,才有机会报数,否则不给报数
- 当报数到3时,下标为J的人出局,并给他赋值0
- 游戏人数减一
- 重置,从1开始报数
- 当j==n+1超过参加人数到最后一个人报数时,从头开始报数!
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("请输入参加队长竞选人数:");
int n = scan.nextInt();
//count记录多少人来选队长
int count = n;
//j用来循环人数
int j = 1;
//用countnum来报数;1,2,3-----1,2,3------1,2,3
int countnum = 0;
int[] arr = new int[n+1];
//对参与竞选的人都赋值1,当有数到3的人赋值为0
for(int i=1;i<=n;i++) {
arr[i]=1;
//System.out.print(arr[i]+" ");
}
//循环只有当剩下1人时结束
while (count>1) {
//只有当j下标的人的值不为0时,才有机会报数,否则不给报数
if(arr[j]!=0) {
//当报数到3时,下标为J的人出局,并给他赋值0
countnum++;
if(countnum==3) {
//游戏人数减一
count--;
//j下标的人出局
arr[j]=0;
//重置,从1开始报数
countnum=0;
for(int i=1;i<=n;i++) {
System.out.print(arr[i]+" ");
}
System.out.println();
}
}
//到下一个人报数
j++;
//当超过参加人数到最后一个人报数时,从头开始报数!
if(j==n+1) {
j=1;
}
}
//输出值是1的人
for (int i = 1; i < n; i++) {
if(arr[i]!=0) {
System.out.println("当队长的是第"+i+"个人");
}
}
}
结果: