抛手绢(约瑟夫问题)-java实现思路及代码

本文探讨了约瑟夫问题的需求分析,即n人报数,数到m的人退出,直至剩下一人。通过算法设计,用Java实现该问题,主要涉及双重循环:找到退出者后重新开始报数,数组计数满后归零进入下一轮,直至只剩一人。
摘要由CSDN通过智能技术生成

需求分析:有n个人一起报数,报道数字m的人则退出游戏,然后又重新开始报数,如此循环,最后只剩下一个人则停止报数,输出这个人的位置。

算法设计:

package nine;
public class PaoSJ{
    public static void main(String [] argc){
        //确定游戏人数,用数组存储
        int[] arr=new int[100];
        addArr(arr);
        System.out.println(circleArr(arr));
    }
    //给数组赋值
    public static void addArr(int [] arr){
        for(int i=0;i<arr.length;i++){
             arr[i]=1;
        }

    }
    //做循環找到最後剩下的數
    public static int  circleArr(int[] arr){
        int index=arr.length;//要報的數
        int i=0;//返回数字序号
        int m=0;//循環數
        int x=0;//接收最後剩下的人的下標
        while(index>1){
            //报数
            if(arr[i]==1){
                m++;
            //找到退出的人,退出操作,第一个循环实现
                if(m==3){
                    arr[i]=0;
                    index--;
  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值