【约瑟夫环】Java实现:100个人开始从1开始报数,每当报数到3,报数3的人离开,求最后留下来人的位置。

问题背景:约瑟夫环问题
在这里写一个简单的约瑟夫环的问题:100个人坐成一圈开始从1开始报数,每个报数为3的人离开座位,直到座位上只剩下一个人,求这个人的位置。

解决问题使用的工具&编程语言:
工具:Eclipse
编程:Java

代码如下:

public class Yuesefu {
public static void main(String[] args){
int number=100; //假设一共有100个人,同时也是数组容量
int index=0; //定义数组下标
int say=0; //报数

        boolean array[]=new boolean[number];//定义一个boolean类型的数组,将所有人装进去,数组元素默认为ture。
        for(int i=0;i<array.length;i++){    //当该座位的人报数为3时,将该数组元素从ture改成false。从而实现人数减1
            array[i]=true;
        }

        while(number>1){                    //当只剩一个人的时候,跳出循环
            if(array[index]){               //座位有人时报数
                say++;                      //报数
            }
            if(say==3){                     //当报数为三时,重新开始计数,该座位的人离开,数组位置值变为false,人数减一
                say=0;
                array[index]=false;
                number--;
            }
            index++;                        //数组下标加一,往后移动,继续报数
            if(index==100){                 //当数组下标等于100的时候,重新开始一圈,数组下标变为0
                index=0;
            }
        }

        for(int i=0;i<array.length;i++){    //进行多次循环后,找出最后数组中值仍然为ture的元素
            if(array[i]){                   
                System.out.println("剩下的是从刚开始报数之后的第"+i+"个人");
            }
        }               
    }

}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
PS:代码仅供参考。

版权声明:本文为博主原创文章,未经博主允许不得转载。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值