今天同学们相约一起爬山游玩,为了更好的进行这场活动,大家准备推举 一个人作为出游的临时队长。为了体现合理公平,大家提出了一个比较有趣的 规则。所有人围成一圈,顺序排号。从第一个人开始报数(从1到3报数), 凡报到3的人退出圈子,剩下的人继续报数,最后留下的当选为队长。 请你通过编写程序,求出一组人中的队长是原来第几位同学。 初学者思路: 先将所有人定义成一个Boolean型的数组,初始值为true,报到3的人变为false 定义剩余人数,初始报数为1,并计算已经报完的人数 当已经报完人数和剩余人数相等时,说明一圈结束,开始新的循环,计数归0.最后输出值为true的人,即是队长 代码结果为:
public static void main(String[] args) { int n;//总人数 Scanner scanner = new Scanner(System.in); System.out.println("输入围成一圈的人数"); n = scanner.nextInt(); boolean nums[] = new boolean[n]; for (int i = 0; i < n; i++) { nums[i] = true; //给每人赋值 } int leftNum = n;//剩余人数 int number = 0;//开始报数 int index = 0;//计数 while(leftNum > 1) { if(nums[index] == true) { number++; if(number == 3) { number = 0;//重新报数 nums[index] = false;//淘汰 leftNum--;//剩余人数减少 } } index++;//往后数 if(index == n) { //所有人都遍历后,重新开始 index = 0; } } for (int i = 0; i < n; i++) { if(nums[i] == true) { //找出剩下的人 System.out.println("队长是原来的第" + (i+1) + "位同学"); } } }