循环链表-圆桌出列问题

8:圆桌问题 c++ 问题描述 : 圆桌上围坐着2n个人。其中n个人是好人,另外n个人是坏人。如果从第一个人开始数数,数到第m个人,则立即处死该人;然后从被处死的人之后开始数数,再将数到的第m个人处死……依此方法不断处死围坐在圆桌上的人。试问预先应如何安排这些好人与坏人的座位,能使得在处死n个人之后,圆桌上围坐的剩余的n个人全是好人。 输入说明 : 输入:好人和坏人的人数n(<=32767)、步长m(<=50); 输出说明 : 输出2n个大写字母,‘G’表示好人,‘B’表示坏人,50个字母为一行。 输入范例: 52 阅读详情

约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3…n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。

以下是C++实现代码

#include <cstdlib>
#include <cstdio>
typedef struct LNode{
    int data;
    struct LNode *link;
}LNode,*LinkList;

//建立无头结点的循环链表

LinkList Create( int n )
{
    LinkList head,p,temp;
    head=NULL;
    p=head;
    int i;
    for( i=1;i<=n;i++ ){
        temp=(LinkList)malloc(sizeof(LNode));
        temp->data=i;
        if( head==NULL ){
            head=temp;
            p=head;
        }else{
            p->link=temp;
            p=temp;
        }
    }
    p->link=head;
    return head;
}

//出列函数

void function( int n,int m,int k )
{
    LinkList head,p,q;
    head=Create(n);
    int i;
    printf( "the list is:\n" );
    p=head;

    for( i=0;i<n;i++ ){
        printf( "%d ",p->data );
        p=p->link;}
    printf("\n");
    p=head;
    //找到第一个报数的结点,即编号为k的结点
    for( i=0;i<n;i++ ){
        if( k==p->data )
            break;
        p=p->link;
    }
    //循环数1到m,出列
    while( n-- ){
        for( i=1;i<m;i++ ){
            q=p;
            p=p->link;
        }
        printf( " %d out\n",p->data );
        q->link=p->link;
        free(p);
        p=q->link;

    }
}

//主函数

int main()
{
    function(5,4,2);
    return 0;
}
【华为机试真题 Python实现】圆桌队列【2022 Q2 | 200分】 《华为机试真题》专栏含牛客网华为专栏、华为面经试题、华为OD机试真题。如果您在准备华为的面试,期间有想了解的可以私信我,我会尽可能帮您解答,也可以给您一些建议!欢迎加微信:Ayemmar本文解法非最优解(即非性能最优)。一组人(n 个),围成一圈,从某人开始数到第三个的人出列,再接着从下一个人开始数,最终输出最终出列的人。约瑟夫环是一个数学的应用问题:已知 n 个人(以编号 1,2, 3…n 分别表示) 围坐在一张圆桌周围。从编号为 k 的人开始报数,数到 m 的那个人出列;他的下一个人又从 1 开始报数, 阅读详情

相关推荐

循环链表(约瑟夫环)的建立及C语言实现

无论是静态链表还是动态链表,有时在解决具体问题时,需要我们对其结构进行稍微地调整。比如,可以把链表的两头连接,使其成为了一个环状链表,通常称为循环链表。 和它名字的表意一样,只需要将表中最后一个结点的指针指向头结点,链表就能成环儿,如图1 所示。 图 1 循环链表 需要注...

数据结构和算法教程(C语言版) 504

圆桌问题(c++)

圆桌上围坐着2n个人。其中n个人是好人,另外n个人是坏人。如果从第一个人开始数数,数到第m个人,则立即处死该人;然后从被处死的人之后开始数数,再将数到的第m个人处死......依此方法不断处死围坐在圆桌上的人。试问预先应如何安排这些好人与坏人的座位,能使得在处死n个人之后,圆桌上围坐的剩余的n个人全是好人。对于每一组数据,输出2n个大写字母,'G'表示好人,'B'表示坏人,50个字母为一行,不允许出现空白字符。多组数据,每组数据输入:好人和坏人的人数n(<=32767)、步长m(<=32767);

The_B1的博客 777

约瑟夫环问题(猴子选大王)

题目描述 已知n个人(以编号1,2,3,······,n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从K开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。试用C++编程实现。 思路分析(循环链表) 通过输入n,m,k 3个正整数,求出列的序列。这个问题采用的就是典型循环链表的数据结构,就是将一个链表的尾元素指针指向队首元素。 步骤如下: 建立一个具有n个链节点、无头节点的循环链表。 确定第一个报数人的位置。 不断从链表中删除链节点,知道链

fabien00的博客 789

Python每日一练:圆桌&争风吃醋的豚鼠&韩信点兵(全一行代码解法)

很显然,Python的受众远远大于C++,其实笔者本人对Python的理解也是远强于C++的,C++纯粹是为了假装笔者是个职业选手才随便玩玩的,借着十多年前学的C的功底,强行假装的。因职业原因,Python更适用于运维、网络、AI方向,所以用得很多。最近假装职业码农装过头了,写点Python代码都习惯性加;了,更离谱的是优快云对笔者的能力判断中,C++一个劲地涨,Python都连能力都没了…所以以后也要用Python来解解题,经常锻炼一下。

攻城狮的博客 1662

约瑟夫环(python)

约瑟夫环(约瑟夫问题)是一个数学的应用问题: 已知n个人(以编号1,2,3…n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。通常解决这类问题时我们把编号从0~n-1,最后 结果+1即为原问题的解。 对于任意x人报数y def Yosef(x, y): if not x or not y: return 0 res = list(range(x)) i = 0 while len(res) > 1: i = (i

vesta软件_分子动力学计算实战:利用 OVITO 软件找弗伦克尔缺陷和位错环分析

今天继续和大家分享这篇纯分子动力学(MD)的 Nat. Comm. 文章(DOI:10.1038/s41467-018-07102-3)。上期推文(从一篇 Nat. Comm. 学习经典分子动力学基本知识和相关软件基本操作 (一)),我们借用该文章的 fig.1 简单介绍了如何用文中所提到的 LAMMPS 软件来实现材料中级联碰撞过程。但是,想完整的展示类似该文章的 fig.1,单纯利用...

weixin_39524842的博客 5983

约瑟夫环问题python解法_约瑟夫环问题python解法 | 学步园

约瑟夫环问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到k的那个人被杀掉;他的下一个人又从1开始报数,数到k的那个人又被杀掉;依此规律重复下去,直到圆桌周围的人只剩最后一个。思路是:当k是1的时候,存活的是最后一个人,当k>=2的时候,构造一个n个元素的循环链表,然后依次杀掉第k个人,留下的最后一个是可以存活的人。代码如下:class Node(...

weixin_39891262的博客 628

Cadence Allegro 17.4学习记录开始02-原理图Capture CIS 17.4

Allegro的第一方网表与第三方网表有以下几个区别点;Ø 与Allegro实现交互式操作的是第一方网表,第三方网表时不可以实现交互式操作;Ø 第三方网表不能将器件的Value属性导入到PCB中,输出时以封装属性来代替Value属性,第一方网表是可以的;Ø 网表导入到PCB中时,第三方的网表需要指定事先指定好PCB封装库文件,并产生Device文件,才可以将网表导入到PCB中,第一方网表则可以直接导入。

qq_31444421的博客 1万+

循环链表 c++实现

问题描述: 已知n个人,围坐一个圆桌周围。从编号为k的人开始报数,数到m的那个人出列,他的下一个人从1开始报数,数到m的那个人出列,重复,直达所有人全部出列。 循环链表的实现: // letcode.cpp : 定义控制台应用程序的入口点。 // #include"stdafx.h" #include<iostream> #include<stdio.h> #i...

hopegrace的博客 845

自定义LayoutManager实现android-pile-layout滑动卡片堆叠效果

这是我的第一篇博客,总算有个契机开始写博客了,就从自定义LayoutManager开始吧。 前段时间看到一个项目(android-pile-layout),效果特别不错,这是效果图: 效果确实不错,我看了下实现,是用的自定义的ViewGroup实现的,计算什么还搞的挺复杂的,具体的没细看。作者说也尝试过用LayoutManager实现,但是没找到合适的数学模型,好吧,看到数学模型我

u014296305的博客 1万+

U-net复现pytorch版本 以及制作自己的数据集并训练

GitHub链接: https://github.com/milesial/Pytorch-UNet 论文链接:

candice5566的博客 3万+

循环链表

面试 试题描述:已知n个人(编号1,2,3,4,...)围坐在一张圆桌周围。从编号为k 的人开始报数,数到m的那个人出列,他的下一个人又开始从1开始报数,数到m的那个人又出列,以此规律重复下去,直到圆桌周围的人全部出列。用c++实现。 核心步骤:(1)建立一个具有n个连结点、无头节点的循环链表。                     (2)确定第一个报数人的位置。    

珍惜当下 613

通过TMS320F28335学习DSP的开发流程——28335的基础知识(1)

1、TMS320F28335内核的主要特点 ①F28335 DSP集成了DSP和微控制器的长处,如DSP的主要特征、单周期乘法运算,F28335能够在一个周期内完成32x32位的乘法累加运算,或者两个16x16位乘法累加运算,而同样32位的普通单片机则需要4个周期以上才能完成 ②快速的中断响应 ③可在任何内存位置进行单周期读、修改、写操作 ④可采用C/C++编程软件,效率非常高 2、处理器的主要资源 ①32位浮点DSP,主频是150MHz,方便电机控制、电力设备控制及工业控制等。 ②片上存储器:FLASH–

Kayboy的博客 2万+

【数据结构】循环链表

熟悉循环链表的定义,建立方法及相关基本操作,理解循环链表的基本思想。 算法完善,考虑时间复杂度。

2201_75406816的博客 240

echarts 生成中国陕西省份(或其他省份)的地图,大屏使用

效果图: 一、首先第一步需要下载echarts和获取到陕西身份的地图信息。 1.下载echarts链接(官网): Apache ECharts 2.生成指定省份的地图数据信息,数据可以在阿里云获取。 DataV.GeoAtlas地理小工具系列 如图,点击左圈需要的省份,这里我选择的是陕西省,然后点击右圈复制下载链接,得到一个json格式的数据,可以在json转换网站转成js格式。 Json在线解析格式化-Json在线校验Json格式化压缩-Jsons在线工具 转成js格.

PrimaryColor 3890

企业财务共享服务中心业务蓝图规划方案【附全文阅读】

《企业财务共享服务中心业务蓝图规划方案》为集团企业提供财务共享中心建设全流程指导,涵盖战略定位、组织架构、业务流程、信息系统、运营管理和变革实施六大维度。方案明确共享中心"交易处理+战略支撑"双重职能,设计专业分组架构,筛选标准化高、价值明确的流程(如核算、资金结算等)纳入共享范围,构建业财一体化平台,并配套绩效与风险管控体系。结合项目型企业管理特点,分阶段推进实施,助力企业实现财务集中化与标准化转型。

cdfunlove的博客 994

利用双向循环链表实现约瑟夫环问题(C++版)

1.问题简述    约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。通常解决这类问题时我们把编号从0~n-1,最后结果+1即为原问题的解。 2.实现思路 (1)建立一个孩子类(相当于数据结构中的...

马马也的个人博客 2685

【100%通过率】华为OD机试真题 Python 实现【打印机队列】【2022.11 Q4 新题】

有5台打印机打印文件,每台打印机有自己的待打印队列。因为打印的文件内容有轻重缓急之分,所以队列中的文件有1~10不同的代先级,其中数字越大优先级越高。打印机会从自己的待打印队列中选择优先级最高的文件来打印。如果存在两个优先级一样的文件,则选择最早进入队列的那个文件。现在请你来模拟这5台打印机的打印过程。

MISAYAONE的博客 1万+

【2022刷题】约瑟夫环

题目描述 设有 n 个人围坐在圆桌周围,现从某个位置 k 上的人开始报数,报数到 m的人就站出来。下一个人,即原来的第 m+1 个位置上的人,又从 1 开始报数,再报数到 m的人站出来。依次重复下去,直到全部的人都站出来为止。试设计一个程序求出这 n 个人的出列顺序。 输入描述 输入只有一行且为用空格隔开的三个正整数 n,k,m其含义如上所述。 输出描述 共 n行,表示这 n 个人的出列顺序。 输入输出样例 示例 1 输入 3 5 8 输出 3 2 1 运行限制 最大运行时间:1s 最大..

路人甲^_^的博客 348

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Josephus 约瑟夫问题

去年学数据结构时写的,不考虑时间/空间复杂度 /************************************************************************/ /* 已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。 /* 从编号为k的人开始报数,数到m的那个人出列; /* 他的下一个人又从1开始报数,数到m的那个人又出列

q8515620的专栏 583

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

链队列约瑟夫环c++代码_C++ 中循环链表和约瑟夫环

循环链表和约瑟夫环循环链表的实现单链表只有向后结点,当单链表的尾链表不指向NULL,而是指向头结点时候,形成了一个环,成为单循环链表,简称循环链表。当它是空表,向后结点就只想了自己,这也是它与单链表的主要差异,判断node->next是否等于head。代码实现分为四部分:初始化插入删除定位寻找代码实现:void ListInit(Node *pNode){int item;Node *tem...

weixin_34031238的博客 1211

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

约瑟夫问题

已知n个人(编号分别为1、2、3,……、n)围坐在一张圆桌周围,从编号为1的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列,依次规律重复下去,直到圆桌周围的人全部出列 输入 一行:人数n和间隔数m   输出 出列顺序,每个编号之间用一个空格分开  样例输入 9 5   样例输出 5 1 7 4 3

那个付的博客 587

数据结构算法题:约瑟夫环问题(循环链表解决)

数据结构 设有n个人围坐在一个圆桌周围,现从第s个人开始报数,数到第m的人出列,然后从出列的下一个人重新开始报数,数到m的人又出列,如此重复,直到所有的人全部出列为止。Josephus问题是:对于任意给定的n,m,s,求出按出列次序得到的n个人员的顺序表。 思路:从 1 到 n 构成一个循环链表。找到开始报数的结点p 。依次报数,数到m的结点,输出data值,并更新为下一个结点的data值。 p->next 指向 p->next->next。也就是将下一个结点提前一位,起到删除当前结点的效

m0_53793974的博客 3768

C++ 约瑟夫环问题

C++ 约瑟夫环问题  约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。 [cpp] view plaincopyprint? /** * 约瑟夫环: * 已知n个人(以编号1,2,3

大雄不爱吃肉 1134

约瑟夫问题实验 循环单链表

一、实验目的和要求 (一)问题描述 设有n个人围坐在圆桌周围,现从某个位置m(1≤m≤n)上的人开始报数,报数到k的人就站出来。下一个人,即原来的第k+1个位置上的人,又从1开始报数,再报数到k的人站出来。依次重复下去,直到全部的人都站出来为止。试设计一个程序求出这n个人的出列顺序。 (二)问题分析 这是一个使用循环链表的经典问题。因为要不断出列,所以采用单链表的存储方式能更恰当的模拟出列的情况,...

xiongshuxian2019的博客 880

循环链表实现约瑟夫环(C语言)

约瑟夫环问题,是一个经典的循环链表题。 约瑟夫环问题描述:已知 n 个人(分别用编号 1,2,3,…,n 表示)围坐在一张圆桌周围,从编号为 k 的人开始顺时针报数,数到 m 的那个人出列;他的下一个人又从 1 开始,还是顺时针开始报数,数到 m 的那个人又出列;依次重复下去,直到圆桌上剩余一个人。输出的最后一个人即为圆桌剩余的一人。 #include<stdio.h> #include<stdlib.h> typedef struct LNode{ int data; stru

weixin_45707477的博客 818
上一篇: C++ 单链表操作
下一篇: 链式栈初始化,入栈,出栈
shenchen_studyC
博客等级 码龄11年 7粉丝 10原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值