• Java程序设计基础 数组 练习2 约瑟夫环问题


    设有N个人围坐一圈并按顺时针方向从1到N编号,从第S个人开始进行1-M报数,报数到第M的人,此人出圈,在从他的下一个人重新开始从1-M报数,如此进行下去,每次报数到M的人就出圈,直到所有人都出圈为止。给出这N个人的出去按顺序。

    package exercise;
    // 约瑟夫环问题
    public class Joseph_le {
    
        public static void main(String[] args) {
            // TODO 自动生成的方法存根
            final int N = 13,S = 3,M = 5;
            int i = S - 1,j,k = N,g = 1;
            int [] cot = new int[N];
            for(int h = 1;h <= N;h++)
            {
                cot[h - 1] = h;// 将编号为h的人存入下标为h-1的数组元素中
            }
            System.out.println("
    出圈的顺序为:");
            do
            {
                i = i+ (M - 1);//计算出圈人的下标i
                while(i >= k)//当数组下标i大于等于圈中的人数k时
                    i = i - k;//当数组的下标i减去圈中的人数k
                System.out.print("    " + cot[i]);
                for(j = i;j < k-1;j++)
                    cot[j] = cot[j + 1];//cot[i]出圈后,将后续人的编号前移
                k--;//圈中的人数k减1
                g++;//g为循环控制变量 
            }while(g <= N);//共有N人所以循环N次
        }
    
    }

    程序运行结果如下:


    出圈的顺序为:
    7 12 4 10 3 11 6 2 1 5 9 13 8

  • 相关阅读:
    ASP记录(一)
    ASP HTML JS CSS JQ之间恩怨
    ASP记录(二)之Input
    网页范例
    初识GoAhead
    TCP、IP、Http、Socket、telnet
    自定义博客的背景图片
    工具管理操作类介绍
    STL string的构造函数
    cout 格式化输出
  • 原文地址:https://www.cnblogs.com/yuyang-gr/p/6690391.html
Copyright © 2020-2023  润新知