用java有n个人排成一个环从1号人开始从1到最后报到m的人离开该环从下一个人继续从1开始到m报数报到m的人离开该环这样一直进行下去直到最终剩余p个人。从键盘输入n、m、p要求n=2、m=2、pn输出最终剩余的p个初始编号。
你可以使用循环链表来解决这个问题。首先创建一个循环链表,节点的值表示人的编号。然后根据输入的n,依次将n个人添加到链表中。
接下来,使用一个循环来模拟报数的过程。每次循环,从当前节点开始,依次报数,并将报到m的节点从链表中移除。直到链表中剩余p个节点。
最后,输出剩余p个节点的编号。
以下是一个可能的解法:
import java.util.Scanner;
class Node {
int value;
Node next;
public Node(int value) {
this.value = value;
this.next = null;
}
}
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入n:");
int n = scanner.nextInt();
System.out.print("请输入m:");
int m = scanner.nextInt();
System.out.print("请输入p:");
int p = scanner.nextInt();
if (n < 2 || m < 2 || p >= n) {
System.out.println("输入不符合要求");
return;
}
Node head = new Node(1);
Node current = head;
for (int i = 2; i <= n; i++) {
Node newNode = new Node(i);
current.next = newNode;
current = newNode;
}
current.next = head;
while (n > p) {
for (int i = 1; i < m; i++) {
current = current.next;
}
current.next = current.next.next;
n--;
}
for (int i = 0; i < p; i++) {
System.out.print(current.value + " ");
current = current.next;
}
}
}
这段代码首先从键盘输入n、m、p,然后根据输入的n,依次将n个人添加到循环链表中。接下来,使用一个循环来模拟报数的过程,直到链表中剩余p个节点。最后,输出剩余p个节点的编号
原文地址: https://www.cveoy.top/t/topic/hK8K 著作权归作者所有。请勿转载和采集!