杰瑞科技汇

Java围圈编号问题如何实现循环报数?

Java实现n个人围成一圈顺序排号

以下是一个Java程序,实现n个人围成一圈顺序排号,并可以模拟约瑟夫问题(即从某个指定的人开始报数,数到k的那个人出列,然后从下一个人重新开始报数,直到所有人都出列)。

Java围圈编号问题如何实现循环报数?-图1
(图片来源网络,侵删)
import java.util.ArrayList;
import java.util.List;
public CircleNumbering {
    public static void main(String[] args) {
        int n = 7; // 总人数
        int k = 3; // 报数到k的人出列
        int start = 0; // 从第0个人开始(编号从0开始)
        List<Integer> people = new ArrayList<>();
        for (int i = 0; i < n; i++) {
            people.add(i + 1); // 编号从1到n
        }
        System.out.println("初始围圈顺序: " + people);
        int index = start;
        while (!people.isEmpty()) {
            // 计算要出列的人的索引
            index = (index + k - 1) % people.size();
            System.out.println("出列的人: " + people.remove(index));
        }
    }
}

程序说明

  1. 初始化:创建一个包含n个元素的列表,编号从1到n。
  2. 模拟过程
    • 从指定的人开始(start参数)
    • 每次数k个人,第k个人出列
    • 从下一个人重新开始报数
  3. 出列顺序:程序会输出每个人出列的顺序

示例输出

当n=7,k=3,start=0时,输出可能如下:

初始围圈顺序: [1, 2, 3, 4, 5, 6, 7]
出列的人: 3
出列的人: 6
出列的人: 2
出列的人: 7
出列的人: 5
出列的人: 1
出列的人: 4

变体实现

如果你想更简单地实现只是围成一圈排号而不模拟出列过程,可以这样:

public class SimpleCircleNumbering {
    public static void main(String[] args) {
        int n = 7;
        System.out.println("围圈顺序编号:");
        for (int i = 0; i < n; i++) {
            System.out.print((i % n) + 1 + " ");
        }
    }
}

这个版本会简单地输出1到n的编号循环排列。

你可以根据具体需求选择合适的实现方式。

Java围圈编号问题如何实现循环报数?-图2
(图片来源网络,侵删)
Java围圈编号问题如何实现循环报数?-图3
(图片来源网络,侵删)
分享:
扫描分享到社交APP
上一篇
下一篇