新学数据结构的菜鸟求各位大神给个代码参考下约瑟夫环怎么做! 35
题目描述已知n个人(以编号1,2,3...n分别表示)按既定的方向围坐在一张圆桌周围。从编号为k的人开始按既定方向报数,数到m的那个人出列;他的下一个人又从1开始报数,数...
题目描述
已知n个人(以编号1,2,3...n分别表示)按既定的方向围坐在一张圆桌周围。从编号为k的人开始按既定方向报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列
样例输入
9
1
5
样例输出
5
1
7
4
3
6
9
2
8
用java链表做,谢谢各位 展开
已知n个人(以编号1,2,3...n分别表示)按既定的方向围坐在一张圆桌周围。从编号为k的人开始按既定方向报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列
样例输入
9
1
5
样例输出
5
1
7
4
3
6
9
2
8
用java链表做,谢谢各位 展开
1个回答
展开全部
import java.util.Scanner;
public class 约瑟夫问题链表 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int k = scanner.nextInt();
int m = scanner.nextInt();
scanner.close();
约瑟夫(n, k, m);
}
/**
* 求解约瑟夫问题。
*
* @param n
* 起始总人数。
* @param start
* 起始报数人编号。
* @param m
* 报到该数的人出列。
*/
public static void 约瑟夫(int n, int start, int m) {
if (n <= 0 || start <= 0 || m <= 0 || start > n) {
return;
}
LinkList list = createList(n);
moveHead(list, start);
out(list, m);
}
/**
* 从链表头开始数到第 m 个出列。
*
* @param list
* @param m
*/
private static void out(LinkList list, int m) {
if (m <= 0 || list.head == null) {
return;
}
while (list.head != null) {
moveHead(list, m);
System.out.println(list.head.no);
if (list.head != list.tail) {
list.tail.next = list.head.next;
list.head.next = null;
list.head = list.tail.next;
} else {
list.head.next = null;
list.head = null;
list.tail = null;
}
}
}
private static LinkList createList(int n) {
LinkList list = new LinkList();
for (int i = 1; i <= n; i++) {
Node node = new Node(i);
if (list.tail == null) {
node.next = node;
list.head = node;
list.tail = node;
} else {
list.tail.next = node;
list.tail = node;
list.tail.next = list.head;
}
}
return list;
}
/**
* 链表向后循环移 n-1 个节点。
*
* @param list
* @param n
*/
private static void moveHead(LinkList list, int n) {
if (n <= 1 || list.head == null) {
return;
}
for (int i = 1; i < n; i++) {
list.head = list.head.next;
list.tail = list.tail.next;
}
}
private static class Node {
public int no;
public Node next;
public Node(int no) {
this.no = no;
}
}
/**
* 单向循环链表。
*
*/
private static class LinkList {
public Node head;
public Node tail;
}
}
光点科技
2023-08-15 广告
2023-08-15 广告
通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准格式存在于文件...
点击进入详情页
本回答由光点科技提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询