有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。

本文介绍了一个通过Java实现的报数游戏算法。游戏中,n个人围成一圈轮流报数,每报到3的人退出,直至最后剩下一人。文章提供了完整的代码示例及运行结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import java.util.Scanner;

/**
 * 问题:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报
 * 到3的人退出圈子,问最后留下的是原来第几号的那位。
 *
 * @author Administrator
 *
 * 程序如下:
 *
 */
public class CountOff {
   
    public static void main(String args[]){
        System.out.println("请输入围成一圈的人的个数,按Enter键结束!");
        Scanner s=new Scanner(System.in);
        boolean[] b=new boolean[s.nextInt()];
        for(int i=0;i<b.length;i++){
            b[i]=true;
        }
        CountOff co=new CountOff();
        System.out.println("最后留下的是原来的第"+co.countOff(b)+"号的那位!");
    }
   
    public int countOff(boolean[] arr){
       
        int a=arr.length;//布尔型数组中为真的元素的数目
        int x=0;//数数的值
        int number=0;//最后为真的那个元素的位置
       
        while(a>1){//如果a的值大于1则继续进行遍历
            for(int i=0;i<arr.length;i++){
                if(arr[i]){//如果遍历到的布尔型数组的元素为真,则继续进行如下操作
                    x++;//数的数字1、2、3,从1开始数数
                    if(x==3){//当数到数字3时,让重新从1开始数数
                        x=0;
                        arr[i]=false;//让数到3的那个元素等于false,直到只剩下一个元素为真
                        a--;//让其中为真的元素数目随着减去一,直到a为一时为止
                    }
                }
            }
        }
       
        for(int i=0;i<arr.length;i++){//当上面的循环结束后,即布尔型数组中只剩下一个元素为真时,返回最后那个为真的元素的位置
            System.out.println(arr[i]);//当布尔型数组中只有一个元素为真时,遍历并显示该数组,以便得以验证那个元素为真的位置
            if(arr[i]){
                number=i+1;//求布尔值为真的那个元素所在的位置
            }
        }      
        return number;//返回这个位置
    }
   
}

 

运行结果如下:

 

run:
请输入围成一圈的人的个数,按Enter键结束!
7
false
false
false
true
false
false
false
最后留下的是原来的第4号的那位!
成功生成(总时间:3 秒)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值