package package2; \nimport java.util.Scanner; \nclass Node \n{ \n int data; \n Node next; \n\n Node(int data) \n { \n this.data = data; \n } \n} \n\npublic class JosephusProblem \n{ \n private static Scanner scanner; \n\tprivate static int p; \n\n\tpublic static void main(String[] args) \n\t{ \n scanner = new Scanner(System.in); \n System.out.print("请输入总人数n:"); \n int n = scanner.nextInt(); \n System.out.print("请输入报数m:"); \n int m = scanner.nextInt(); \n System.out.print("请输入最终剩余人数p:"); \n setP(scanner.nextInt()); \n\n Node head = createJosephusCircle(n); \n Node current = head; \n while (current.next != current) \n { \n for (int i = 1; i < m - 1; i++) \n { \n current = current.next; \n } \n System.out.print(current.next.data + " "); \n current.next = current.next.next; \n current = current.next; \n } \n System.out.println(current.data); \n } \n\n private static Node createJosephusCircle(int n) \n { \n Node head = new Node(1); \n Node current = head; \n for (int i = 2; i <= n; i++) \n { \n current.next = new Node(i); \n current = current.next; \n } \n current.next = head; \n return head; \n } \n\n\tpublic static int getP() \n\t{ \n\t\treturn p; \n\t} \n\n\tpublic static void setP(int p) \n\t{ \n\t\tJosephusProblem.p = p; \n\t} \n}采用什么物理结构为什么内容:这段代码使用了循环链表作为物理结构。循环链表是一种链表,其最后一个节点指向第一个节点,形成一个循环。在这个约瑟夫问题中,循环链表的好处是可以让游戏继续循环下去,直到只剩下最终剩余人数p个人。 \n\n通过循环链表,可以轻松地实现约瑟夫问题的解决方案。每个节点代表一个人,每次报数m,就将指针移动m-1个节点,然后删除下一个节点,即出列。重复这个过程直到只剩下最终剩余人数p个人。 \n\n循环链表的优势在于不需要额外的内存来创建新的节点,只需要改变节点之间的指针关系即可。这在解决约瑟夫问题中非常方便和高效。

约瑟夫问题 Java 代码实现:循环链表应用

原文地址: https://www.cveoy.top/t/topic/pqre 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录