java约瑟夫问题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/DongGeDeBoKe/article/details/75449986

/*
* 一个圆桌围坐有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;
            }
        }
    }

猜你喜欢

转载自blog.csdn.net/DongGeDeBoKe/article/details/75449986
今日推荐