java约瑟夫问题

/*
* 一个圆桌围坐有50个人,编号按顺时针方向分别为0-49, 按顺时针首位相接报数,从1开始,若数到的数以3结尾或能被3整除,
* 则该人退出游戏,后面的人继续报数, 当首轮报数完成后, 首次报数人接末次报数人继续累加报数,
* 直到剩下最后一个人,输出该人报的数,及该人最开始的编号。
*/


    public static void timu12() {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入多少个人?");
        int n = scanner.nextInt();
        int length = n;// 初始化数
        int number = 1;// 存储数
        int index = 0;// 每局淘汰多少人
        int a[] = new int[n];
        for (int i = 0; i < n; i++) {
            a[i] = i;
        }
        while (length > 1) {
            index = 0;
            for (int i = 0; i < a.length; i++) {
                if (a[i] != a.length) {     
                    if (number % 10 == 3 || number % 3 == 0) {
                        a[i] = a.length;
                        System.out.println();
                        System.out.print("淘汰的编号:" + i + "\t");
                        index++;
                        length--;
                    }
                    System.out.print("number:" + number + "\t");
                    number = number + 1;
                }
            }
            System.out.println();
            System.out.println("淘汰:" + index + "人");
        }
        for(int i=0;i<a.length;i++){
            if(a[i]!=a.length){
                System.out.println("最后一个人:" + (number-1) + "\t"+"  编号:"+a[i]);
                break;
            }
        }
    }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值