写道
public class Count3Quit1 {
// 数组实现
public static int count(int num) {
boolean[] flags = new boolean[num];
int leftNum = flags.length;
int countNum = 0;
int index = 0;
while (leftNum > 1) {
if (!flags[index]) {
countNum++;
if (countNum == 3) {
flags[index] = true;
leftNum--;
countNum = 0;
}
}
index++;
if (index == flags.length) {
index = 0;
}
}
for (int i = 0; i < flags.length; i++) {
if (!flags[i]) {
return i + 1;
}
}
return -1;
}
// 双向链表实现
public static int countByLink(int num) {
Node head = new Node(null, 1, null);
Node tail = head;
for (int i = 2; i <= num; i++) {
Node next = new Node(tail, i, null);
tail.setNext(next);
tail = next;
}
tail.setNext(head);
head.setPrevious(tail);
int length = num;
int countNum = 0;
Node currentNode = head;
while (currentNode.getData() != currentNode.getNext().getData()) {
countNum++;
if (countNum == 3) {
currentNode.getPrevious().setNext(currentNode.getNext());
currentNode.getNext().setPrevious(currentNode.getPrevious());
countNum = 0;
}
currentNode = currentNode.getNext();
}
return currentNode.getData();
}
public static void main(String[] args) {
System.out.println(countByLink(500));
}
}
class Node {
private int data;
private Node next;
private Node previous;
public Node getPrevious() {
return previous;
}
public void setPrevious(Node previous) {
this.previous = previous;
}
public int getData() {
return data;
}
public void setData(int data) {
this.data = data;
}
public Node getNext() {
return next;
}
public void setNext(Node next) {
this.next = next;
}
public Node(Node previous, int data, Node next) {
super();
this.data = data;
this.next = next;
this.previous = previous;
}
}
分享到:
相关推荐
数据结构大作业,c++用双向链表实现约瑟夫环,内含.h与.cpp
已知N个人(以编号1,2,3...n分别表示)围成一个圈。 从编号为K的人开始报数,数到M的那个人出列,他的下一个人又从1开始报数,依照此规律重复下去,直到圆圈中的人全部出列。 问题:请打印出这N个的...双向链表实现的
约瑟夫问题,通过类实现的链表,并加以改进,做成双向链表
约瑟夫环有很多种问法,这里举例了其中一种,不过都大同小异 已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围, 每个人都有自己的一个密码。 从第一个人开始报数,数到m(初始设定)的那个人出列; 他的下...
我们利用双向链表,来解决从而实现约瑟夫问题
C++ 实现的约瑟夫环的操作,双向链表实现,适合初学者的了解双向链表
这是数据结构的约瑟夫双向链表算法,用c++做的,使我们学习数据结构的时候老师让我们做的实验,很经典,提供给大家参考一下!
双向循环链表解决约瑟夫实验报告, 双向循环链表解决约瑟夫实验报告 双向循环链表解决约瑟夫实验报告双向循环链表解决约瑟夫实验报告
不再采用单向循环链表解决约瑟夫问题,而是双向循环链表解决约瑟夫,并采用一些技巧来解释使用说明,即教程,并且密码可以为正整数,也可以为负数
用双向循环链表解决约瑟夫环问题的程序清单
这是我自己写的练习链表时的程序,学了双向链表才发现约瑟夫环很简单。可是要用单链表就要考虑很多了,也许是我太笨了吧。总之希望可以对学链表得人有帮助。
数据结构采用双向循环链表实现双向约瑟夫游戏
单向链表和双向链表的代码,含链表创建,插入,删除节点,以及约瑟夫环的函数几个函数
自己用C语言写的功能比较齐全的约瑟夫环的代码。可以设置开始位置。设置数到的数字。使用了双向链表。比较适合新手用来学习。
数据结构 -- C语言版 -- 链表的部分实现代码(单向链表、双向链表、循环链表、约瑟夫环等),详细介绍参考数据结构--链表的系列博文。链接为:https://blog.csdn.net/songshuai0223/category_9742561.html。
问题描述:约瑟夫生者死者游戏:30个旅客同乘一条船,因为严重超载,非常危险,大家一致同意将一半的旅客投入海中。30个旅客围成一圈,由第一个人开始,依次报数,数到第9人,便把他投入大海中,然后从他的下一个...
用双向循环链表实现约瑟夫问题 2.队和栈。用顺序栈和链式队实现汽车厂管理程序 3.串。模式串的匹配及BF和KMP算法 4.树。用二叉链表存储结构实现二叉树,包括先序遍历、中序遍历、后序遍历和层次遍历。 5...
数据结构课设题目 数据结构课设题目 数据结构数据结构课设题目课设题目
基于数据结构中顺序表和链表的实验设计,包括顺序表和链表的增删查改的实现及相关的应用案例。 编译器:C-Free 5.0 语言:C语言 主要内容: 1.顺序表 ...(2)双向链表的应用——实现长整数的相加
约瑟夫环 leetcode ...LinkedList双向链表实现解决约瑟夫环问题 04-栈 Stack利用java组合实现栈 05-队列 Queue队列实现 Deque双端队列实现 CircleQueue环形队列实现 CircleDeque环形双端队列实现 06-二叉树