约瑟夫——围成一圈,定义一个数值K,从任意位置开始计数,每走K步删除当前位置结点,直到剩下最后一个结点,求最后一个结点
原创 2016-01-05 00:09:53
1253阅读
1点赞
约瑟夫问题约瑟夫问题是个著名的问题:N个人围成一圈,第一个人从1开始报数,报M的将被杀掉,下一个人接着从1开始报。如此反复,最后剩下一个,求最后的胜利者。例如只有三个人,把他们叫做A、B、C,他们围成一圈,从A开始报数,假设报2的人被杀掉。首先A开始报数,他报1。侥幸逃过一劫。 然后轮到B报数,他报2。非常惨,他被杀了 C接着从1开始报数 接着轮到A报数,他报2。也被杀死了。 最终胜利者是C核心在于关注胜利者的下标位置是怎么变的。每杀掉一个人,其实就是把这个数组向前移动了M位。求出.
原创 2023-02-27 16:41:31
182阅读
#include <iostream>#include <stdio.h>#include <stdlib.h>using namespace std;typedef struct node{ ...
原创 2022-09-15 14:56:30
136阅读
约瑟夫(Flavius Josephu)是公元1世纪的一位著名历史学家。约瑟夫(也称为约瑟夫问题)是一个数学的应用问题,可以简单地表述如下:已知n个人(以编号1,2,3…n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列,他的下一个人又从1开始报数,数到m的那个人又出列,依此规律重复下去,直到圆桌周围只剩下一个人为止。【输入形式】参与游戏的总人数,退出游戏的数字以及游戏开
Josephu 问题设编号为1,2,…,n的n个人围坐一圈,约定编号为k(1<=k<=n)的人从1开始报数,数到m的那个人出列,他的下一位又从1开始数,数到m的那个人又出列,依次类推,直到所有人出列为止,由此产生一个出队编号的序列提示用一个不带头节点的循环链表来处理Josephu 问题:先构成一个又n个节点的单循环链表,然后由k节点起从1开始计数,计到m时,对应节点从链表中删除,然后再
实验内容:约瑟夫求解。编号为1,2,....,N的N个人按顺时针方向围坐一圈,每人持有一个密码(正整数)。一开始任选一个正整数作为报数上限值M,从第一个人开始按顺时针方向自1开始顺序报数,报到M时停止报数。报M的人出列,将他的密码作为新的M值,从他在顺时针方向上的下一个人开始重新从1报数,如此下去,直至所有人全部出列为止。试设计一个程序求出出列顺序。利用单向循环链表存储结构模拟此过程,按照出列的
#includeint n,m;struct LinkList{ int bianhao; int mima; struct LinkList* next;}LinkHuan[50];void duru(){ printf("请按编号顺序输入密码值:\n"); for(int i=1;i<=n;i++){ scanf("%d",
原创 2022-08-05 16:45:30
81阅读
数据结构中,队列是一种先进先出的数据结构,相信许多开发者和程序员对它都不陌生。而约瑟夫问题则是一个经典的算法题,尽管看似简单,却充满了挑战。在这篇文章中,我们将深入探讨如何用 Java 实现数据结构队列来求解约瑟夫问题,带领大家走过整个解决过程。 ### 背景描述 约瑟夫的问题可以用一个四象限图来简化描述。在我们的例子中,我们有一组人围成一个圈,从第一个人开始,每数到第K个人则将其淘汰
原创 6月前
17阅读
目录目录问题描述:举例分析:代码实现: 方法一:数组方法二:递归代码实现:方法二:递归:参考资料:问题描述:约瑟夫约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3,...n分别表示)围坐在一张圆桌周围,从编号为k的人开始报数,数到m的那个人出圈,他的下一个人又从1开始报数,数到m的那个人又出圈;按照这个规律一直重复下去,最后一个出局的人为游戏的最终胜利者。举例分析:例如
转载 2023-09-04 10:27:58
213阅读
约瑟夫问题:n个人围坐成一圈,从1开始顺序编号;游戏开始,从第一个人开始由1到m循环报数,报到m的人退出圈外,问最后剩下的那个人原来的序号。 问题分析:面对这样循环报数的数据,我们最容易想到的就是用数组进行报数的模拟,最后把存活的人的编号输出。先贴上这种思路的代码:1 #include<iostream> 2 #include<cstdio> 3 #inclu
C++队列——约瑟夫问题!
原创 2022-03-07 11:43:36
296阅读
C++队列——约瑟夫问题!
原创 2021-12-30 17:04:58
651阅读
循环链表即表示链表头尾相接,从任意一个结点出发可以访问到任意一个节点,需要注意的是,在循环链表中,头结点即是尾结点单链表变成循环链表的改进head->next = head;当插入节点为头结点的时候// 先让该结点指向头结点的下一个结点node->next = head->next;// 让尾结点指向该结点head->next = node;在遍历前,第一个结点应该改成head尾结点的下一个结点,即Node *current_node = head->ne
原创 2023-02-16 12:48:40
113阅读
前几天使用 PHP 实现了约瑟夫问题,使用的是 PHP 数组内部指针的各种操作来实现的,于是想用 JS 来实现一下,实现之前当然要自己来编写一些 JS 数组内部指针的操作函数,就像:reset(), current(), next(), prev(), search(), end() 这些函数,我们都要来自己实现,因为 JS 没有内置这些神奇的操作函数,下面来看代码:Array.prototyp
转载 2023-07-02 22:39:04
71阅读
一、实验目的 1. 了解线性表的逻辑结构特性,以及这种特性在计算机内的两种存储结构。 2. 重点是线性表的基本操作在两种存储结构上的实现;其中以链表的操作为侧重点;并进一步学习结构化的程序设计方法。 二、实验原理 约瑟夫问题的一种描述:编号为1,2,……,n的n个人按顺时针方向围坐一圈,每人持有一个 ...
转载 2021-05-24 23:37:00
399阅读
2评论
C++ 数据结构C/C++ 数组允许定义可存储相同类型数据项的变量,但是结构C++ 中另一种用户自定义的可用的数据类型,它允许您存储不同类型的数据项。 结构用于表示一条记录,假设您想要跟踪图书馆中书本的动态,您可能需要跟踪每本书的下列属性: Title :标题Author :作者Subject
转载 2018-08-01 14:33:00
128阅读
2评论
数据结构文章目录数据结构1.数据结构基本概念2.数据结构关系2.1逻辑结构2.2 物理结构2.3 数据的运算3.算法3.1算法概念3.2算法和数据
原创 2022-05-25 18:20:03
399阅读
本文介绍了C++中常用的11种数据结构及其特性。基础结构包括固定大小的数组、可组合不同类型数据结构体以及面向
做了一下约瑟夫,老师建议用不带头结点并带尾指针的循环链表编写,而我用了带头结点不带尾指针的循环链表,可能时间复杂度会更高,希望大家集思广益,多多交流。约瑟夫问题的一种描述是:编号为1,2,3,?,n的n个人按顺时针方向围坐一圈,每人手持一个密码(正整数)。 一开始任选一个整数作为报数上限值,从第一人开始顺时针自1开始顺序报数,报到m时停止报数。 报m的人出列,将它的密码作为新的m值,从他在顺时
转载 2023-06-06 19:09:15
47阅读
/* 利用双向链表解决约瑟夫问题(也可以使用循环链表) 问题描述: 将n个人围成一圈开始报数,每次报到m的人出列,它的下一个 人从1开始重新报
转载 2022-09-21 15:40:39
82阅读
  • 1
  • 2
  • 3
  • 4
  • 5