天天看点

Java实现所有人围成一圈,顺序排号。从第一个人开始报数(从 1 到 3 报数), 凡报到 3 的人退出圈子,剩下的人继续报数,最后留下的当选为队长。 请你通过编写程序,求出一组人中的队长是原来第几位

By 张旭 CaesarChang 合作 : [email protected]

关注我 带你看更多好的技术知识和面试题

思路结合注释:

首先获取一个总人数 , 然后开一个数组,初始化为1 ,在开一个计数器 suM, 如果sum==3

那么将数组为 0 ,并且更新 剩余人数,只要剩余人数不是1,那就在while循环里面不断循环 ,

最后输出数组中值为1的下标+1就好了 (从0开始的数组)

import java.util.Scanner;

public class Day4_demo1 {
    public static void main(String[] args) {
        System.out.println("请输入总人数:");
        Scanner scanner=new Scanner(System.in);
        int totalNum=scanner.nextInt();    //获取总人数
        int[] number=new int[totalNum];     //为总人数开辟一个数组
        for(int i=0;i<totalNum;i++){        //为数组初始化 全为1
            number[i]=1;
        }
        int remain=totalNum;                //记录当前剩余人数
        int sum=0;                          //用来计数 判断是否等于3
        while(remain!=1){                   //判断是否剩余人数为1
            for(int i=0;i<totalNum;i++){    //进行遍历数组
                sum=sum+number[i];          //更新计数
                if(number[i]==0){           //为0的人不遍历
                    continue;
                }
                if(sum==3){                 //如果报数为3
                    number[i]=0;            //将此人值设为0
                    sum=0;                  //将sum清零
                    remain--;               //剩余的人数更新
                }
            }
        }
        for(int i=0;i<totalNum;i++){        //输出不为0的人的(下标+1)
            if (number[i]!=0){
                System.out.println("队长所在位置为 "+(i+1));
            }
        }

    }
}           

复制