C语言实现约瑟夫环,使用循环单链表和循环数组2种方法

C语言实现约瑟夫环问题的策略与实践 约瑟夫环问题是一个著名的数学问题,也被称为约瑟夫斯问题,是一个关于若干人围成一圈,按照指定的步长报数,并按照报到指定数字的人会被“淘汰”出圈,直至剩下最后一个人的数学游戏。这个问题源自《圣经》中的一个故事,而其数学模型则具有深厚的历史背景和文化意义。在计算机科学领域,约瑟夫环问题不仅是一个经典的算法问题,还被广泛应用于数据结构的学习,尤其是链表操作的实际案例,常被用于教学演示如何通过算法和数据结构解决实际问题。 阅读详情

/*
    1...n的n个人围坐一圈,约定序号为k的人从1开始计数,数到m的那个人出列,他的下一个又从1开始计数,数到m的那个人又出列,依次类推,直到所有人出列
 */


循环单链表实现:

#include <stdio.h>
#include <stdlib.h>

typedef struct node
{
    int data;
    struct node *next;
}node;

void printlist(node *head)
{
    node *p=NULL;
    node *q=NULL;
    if(NULL==head)
    {
        printf("list null\n");
        return;
    }

    q=p=head;
    while(p->next!=q)
    {
        printf("%d ",p->data);
        p=p->next;
    }
    printf("%d ",p->data);

    printf("\n");
}

void josephu(node *head)
{
    int k=0;
    printf("请输入从第几个开始计数:\n");
    scanf("%d",&k);
    int m=0;
    printf("请输入数到几退出:\n");
    scanf("%d",&m);
    int i=0;
    node *p=NULL;
    node *q=NULL;
    //node *r=NULL;
    //r=p=head;
    p=head;
    printf("head:%d\n",head->data);
    for(i=1;i<k;i++)
    {
        p=p->next;
    }
    printf("head+k:%d\n",p->data);
    while(p->next!=p)
    {
        for(i=1;i<m;i++)
        {
            q=p;
            p=p->next;
        }
        printf("出队列的人是%d ",p->data);
        q->next=p->next;
        free(p);
        p=q->next;
    }
    printf("最后出队列的是:%d ",p->data);
    printf("\n");
}

int main()
{
    node *head=NULL;
    node *p=NULL;
    node *s=NULL;
    int n=0;
    printf("请输入链表的个数:\n");
    scanf("%d",&n);
    int i=0;
    for(i=0;i<n;i++)
    {
        s=(node *)malloc(sizeof(node));
        s->data=i;
        s->next=NULL;
        if(i==0)
        {
            p=s;
        }

        s->next=head;
        head=s;        
    }

    p->next=head;

    printlist(head);
    
    josephu(head);

    return 0;
}


循环数组实现:

#include <stdio.h>

int main()
{
    int nNum1=0;
    int nNum2=0;
    int n=0;
    printf("请输入人的个数n:\n");
    scanf("%d",&n);
    int a[n];
    
    printf("请输入从第几个开始计数:\n");
    int k=0;
    scanf("%d",&nNum1);
    k=nNum1-1;
    
    printf("请输入数到几的人出列:\n");
    int m=0;
    scanf("%d",&nNum2);
    m=nNum2;
    
    int i=0;
    for(i=0;i<n;i++)
    {
        a[i]=1;
    }

    int count=0;
    int j=0;
    printf("%d %d %d\n",n,k,m);
    for(i=0;i<n;i++)
    {
        for(j=k;1;j++)
        {
            j=j%n;
            if(a[j]==1)
            {
                count++;
                if(count==m)
                {
                    a[j]=0;
                    break;
                }
            }
        }
        printf("出列的人是:%d\n",j);

        k=j+1;
        for(j=k;;j++)
        {
            if(a[j]==1)
            {
                k=j;
                break;
            }
        }
        count=0;    
    }

    return 0;
}


解密Android相机框架:从HAL到应用层的全链路解析 本文深入解析Android相机框架的全链路架构,从应用层到硬件抽象层(HAL)再到驱动层,详细介绍了CamX-CHI架构的设计哲学与实战应用。通过HAL3接口、V4L2交互机制及Camera2 API的最佳实践,帮助开发者优化相机性能,解决多摄切换、预览卡顿等常见问题,提升成像效率与稳定性。 阅读详情

相关推荐

【自动驾驶学习笔记——Prescan和Simulink 学习笔记和问题记录(1)】

主要记录一些Prescan/Simulink 联合仿真出现的问题。

ly1336545868的博客 1465

【数据结构】之队列的java实现(一)

队列的定义: 队列(Queue)是只允许在一端进行插入,而在另一端进行删除的运算受限的线性表。 (1)允许删除的一端称为队头(Front)。 (2)允许插入的一端称为队尾(Rear)。 (3)当队列中没有元素时称为空队列。 (4)队列亦称作先进先出(First In First Out)的线性表,简称为FIFO表。 队列的修改是依先进先出的原则进行的。新来的成员总是加入队尾,每次离...

dawuafang 417

LAMMPS实操系列(四): 高熵合金FCC-CoCrCuFeNi的退火模拟

我们对FCC-CoCrCuFeNi的退火模拟思路主要是,首先将材料以均匀的速率用100 ps从300 K升温至1000 K,然后在1000 K的温度下平衡100 ps,随后以均匀的速率用100 ps从1000 K降温至300 K,随后通过共轭梯度下降法做静力学结构优化得到退火后的结构。由于FCC-CoCrCuFeNi高熵合金被认为是潜在的工程结构材料[1],接下来我们将对退火前后的结构进行压缩模拟,对比退火前后FCC-CoCrCuFeNi高熵合金的力学性能变化,敬请各位读者关注我们的更新。

Ceshigo_CD的博客 4837

猴子选王——约瑟夫环问题

猴子选王实验:一堆猴子都有编号,编号是1,2,3 ...m,这群猴子(m个)按照1-m的顺序围坐一圈,从第1开始数,每数到第n个,该猴子就要离开此圈,这样依次下来,直到圈中只剩下最后一只猴子,则该猴子为大王。

安辰的博客 7316

【深度解析】信息素养提升实践活动(附:历年获奖作品分析)

全国师生信息素养提升实践活动是由教育部教育技术与资源发展中心(中央电化教育馆)主办,面向全国师生的一项信息化交流展示活动。

m0_74417957的博客 9649

Diffusion:如何从噪声中生成清晰图像

扩散模型是当前AI图像生成领域的核心基础,如Stable Diffusion、DALL·E等热门模型均采用该技术。其原理分为训练和推理两个阶段:训练时通过逐步加噪图片,让AI学习如何去除噪声;推理时则从随机噪声出发,结合文本提示逐步去噪生成清晰图像。模型架构通常包含文本编码器、生成模型(如U-Net)和解码器三部分,通过多轮迭代将低维潜在空间表示转化为最终图像。这种技术模拟了艺术家从混沌中雕琢作品的过程,实现了从随机噪声到目标图像的智能生成。

laumy的学习笔记 1275

C语言,数组实现约瑟夫环问题(两种方法)

约瑟夫环问题:约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。   第一种方法:要求将每次出列的人的序号输出,并输出最后一个出列的人。 代码如下: //c语言用数组实现约瑟夫环 #include #incl

liuzidong1987的专栏 2万+

RK3568 Android14 调试 RTL8211F 千兆以太网 (RGMII)

调试 RTL8211F 的核心在于:确认地址(看电阻贴片情况)和 搞定延时(配置 rgmii-id 或微调 delay 值)。一旦这两点对上了,RK3568 的千兆网络就能稳定运行。希望这篇结合原理图的实战记录能帮到你!

qq_33427070的博客 1649

约瑟夫环问题(c语言数组实现)

1. 简单约瑟夫环问题: N

keepupblw的专栏 2万+

跨应用服务器的自定义 IDoc 传输实战:以 CATSDB 工时为例,打通两套 SAP 系统的数据通道

本文介绍了在企业多SAP系统环境下,使用SAP ALE/IDoc技术实现工时数据跨系统传输的解决方案。文章从技术选型、系统架构到具体配置步骤进行了详细说明,重点阐述了IDoc/ALE在异步传输、全链路追踪和数据重放方面的优势。 文章详细讲解了端到端实施流程,包括Logical System配置、RFC Destination创建、Message Type定义、Segment和Basic Type设计等关键步骤。同时提供了出站封装的ABAP代码示例,强调调用MASTER_IDOC_DISTRIBUTE函数后执

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 173

手把手教你用LabelImg打造专属YOLO数据集:从标注到训练全攻略!

YOLO(You Only Look Once)是一种快速、高效的目标检测算法。它使用一种简洁的.txt文件格式来保存每张图片中的标注信息,适合构建自定义目标检测数据集。🔹 图像文件.jpg.png等;每张图片将对应一个同名的标签文件(.txtdog.jpg对应dog.txt;图像在训练前通常会被缩放成统一尺寸,例如 YOLOv3 默认输入为416x416。🔹 标签文件(.txt)是一个纯文本文件;每一行表示一个标注目标;字段说明类别编号,从0开始,例如:狗是0,猫是1x_center。

FJN110的博客 2464

C语言解决经典问题约瑟夫环--数组

约瑟夫问题,是一个计算机科学和数学中的问题,在计算机编程的算法中,类似问题又称为约瑟夫环,又称“丢手绢问题”。问题的大致内容就是:一共有N个人,从1开始报数,报到p的人出局,之后下一个人再从1开始报数,同样报到p的人出局,直到只剩最后一个人为止,那剩下的这一个人就是胜利者。示例图:此图中,外围数字为对应人的出出局顺序当然原问题是比较简单的,那如果按退出顺序输出每个退出人的原序号该怎么实现呢?...

qq_62065156的博客 2269

京东/淘宝商品评论情感分析:基于Python的大规模评论爬取与NLP情感分析实战

在当今电商蓬勃发展的时代,用户评论已成为影响消费者购买决策的关键因素。本文将详细介绍如何使用Python最新技术栈爬取京东和淘宝商品评论,并运用先进的自然语言处理技术对评论进行情感分析,识别用户的好评与差评倾向。通过完整的代码实现和深入的技术解析,帮助读者掌握从数据采集到情感分析的全流程。本文详细介绍了如何使用Python最新技术栈实现京东和淘宝商品评论的爬取与情感分析。通过结合异步爬虫、反爬策略、BERT情感分析等先进技术,我们构建了一个完整的评论分析系统。高效爬取。

2201_76125261的博客 1402

神奇的约瑟夫环(C语言)

约瑟夫环问题是一个古老而引人入胜的数学问题,涉及人与人之间的生死较量。问题的背景是:n个人围坐成一圈,从第一个人开始按照一定规律进行报数,每报到特定数字的人会被淘汰,直到剩下最后一个人。本文将探讨约瑟夫环问题的解决方法和数学原理。首先介绍了三种常见的实现方式:数组、单链表和数学公式。针对每种方式,分析了其优缺点和适用场景。接着,阐述了约瑟夫环问题的数学公式解法,说明其高效的计算方法。最后,强调了解决约瑟夫环问题的意义,包括培养数学思维、算法思维和逻辑思维,以及在日常生活和实际应用中的潜在价值。

Yawesh的博客 1万+

平安银行电商见证宝(2.0)API接口文档v1.93(全量版).docx

平安银行电商见证宝(2.0)API接口文档v1.93(全量版) (1)

全球铁路矢量数据.zip

全球铁路矢量数据.zip

C语言实现约瑟夫环

约瑟夫环实验报告 报告人:又是一个新的人类? (一)实验描述和要求 实验描述: 已知n个人(以编号1,2,3…n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;...

小黑成长史 4396

阿拉丁国王_Laya项目_

开发的一款小游戏,可以观看源码进行学习,大家多多下载

约瑟夫环的C语言实现

约瑟夫环问题 :已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。 对于该问题,众所周知有两种方法,一为循环单链表,一为数组,在这里我们假设均从第一个人开始报数,先讨论循环单链表的实现方法 相较于数组,用循环单链表实现较为简单,主要就是创建循

zp208151138的博客 1万+

【完整项目,可跑通,C++】mmdeploy部署++Windows+onnx模型+GPU版预测

【是否好用】是的!资料绝对可靠,好用!有任何问题随时私信,帮你解决!【使用步骤】1. 环境准备:安装 mmdeploy、ONNX Runtime 和 OpenCV,配置 CUDA。2. 模型准备:下载或训练 ONNX 模型并放置在指定路径。3. 图像准备:将待检测图像放入输入文件夹。4. 修改代码:设置模型及图像路径。5. 编译和运行:在 IDE 中编译并运行程序,处理图像。6.查看结果:检查输出文件夹中的检测结果。【内容概要】本项目基于 mmdeploy 提供深度学习模型部署解决方案,支持在 Windows 系统上使用 ONNX 模型进行 GPU 加速的图像检测,用户可通过 C++ 程序实现物体检测和结果可视化。【适用人群】深度学习研究人员、开发者、数据科学家和计算机视觉爱好者,便于快速部署和测试物体检测模型。【场景及目标】工业检测、安防监控和自动驾驶等领域,目标是提供一个易用的工具,帮助用户高效处理图像。

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

C语言单循环链表实现约瑟夫环 链表又被称为动态数组,是用一串不连续的地址来存储我们需要的数据。 所以想要解决这个案例,需要对C语言的指针和链表比较熟悉。 指针我们不再多说,简单讲述一下链表(以下纯属个人见解,如有不对请指正): 先贴一个普通的单链表存储结构代码: typedef struct Node{ int data;//用于存放我们的数据 struct Node * next;//用于存放下一个结点的地址 }Node,* LinkList; 搞懂链表,首先要搞懂链表本身就是指针指向数据的

qq_45538969的博客 2570

c语言单链表实现--约瑟夫环

之前我用数组实现过,具体的问题细节我就不细说了,有兴趣的朋友可以看一下,单链表的具体实现操作我也不讲了,之前博文有,这里只讲单链表的实现。 注意的事项:链表成环 #include <stdio.h> #include<malloc.h> #include <stdlib.h> typedef struct Node { int data; struct Node* next; }Node, *LinkList; //循环单链表 Node* IntCL...

Victor_psl的博客 1297

专题九——约瑟夫环问题C语言(数组和单链表)

前言 感觉资料中的比较难理解,借鉴以下博主的代码,自用,归纳一下 https://blog.youkuaiyun.com/Zero__White/article/details/83758782(数组) https://blog.youkuaiyun.com/qq_23034691/article/details/78882259(单链表) 正文 约瑟夫问题:N个人围成一圈,从第一个人开始报数,数到M的人出圈;再由下一个人重新开始报数,数到M的人出圈;…输出依次出圈的人的编号。N,M由键盘输入。 数组形式 这个算法没有后面的算法好

无由页的博客 1881

循环单链表解决约瑟夫环问题

约瑟夫环问题的解决: ##数据结构课的作业,使用了循环单链表来解决这个问题,不过在原题的基础上作了一点点变化,下面上代码! 首先放上解决问题的代码! import java.util.Scanner; public class Y { /** * @param args */ public static void main(String[] args) { // TODO Aut...

eexiaobai的博客 1426

约瑟夫环解法大全(C语言版)

前言: 约瑟夫环不愧是一道经典的算法题,原来也经常看到,但一直没有动手编码研究。最近又被同学提起这个问题,就研究了一下,发现这个问题可以挖掘的东西有很多,怪不得一直是面试的热门问题。

L__ear的博客 1万+

[C & C++]利用循环链表解决约瑟夫环问题

约瑟夫环 /C /C++ /循环链表

自觉 觉他 3862

数据结构:约瑟夫环加强版(每出局一人密码便会更改一次)(C语言 单链表)

约瑟夫环(加强版) 主要运用了 循环单链表的建立、删除 题目描述 编号是 1,2,„„,n 的 n 个人按照顺时针方向围坐一圈,每个人只有一个密码(正整数)。一开始任选一个正整数作为报数上限值 m,从第一个仍开始顺时针方向自 1 开始顺序报数,报到m 时停止报数。报 m 的人出列,将他的密码作为新的 m 值,从他在顺时针方向的下一个人开始重新从 1 报数,如此下去,直到所有人全部出列为止 题目解析 与一般的约瑟夫环相比较,该试题每次出局的密码都会更改 插入代码 int CreateList_F(Li

仔仔木的博客 1722

约瑟夫环问题(Josephus)

问题描述:设有编号 1,2,···,n 的 n(n>0)个人围成一个圈,从某个人开始报数,报到 m 时停止报数,报 m 的人出圈,再从他的下一个人起重新报数,报到 m 时停止报数,报 m 的出圈,……,如此下去,直到所有人全部出圈为止。当任意给定 n 和 m 后,设计算法求 n 个人出圈的次序。 在解决这个问题之前,我们先来了解一个小故事。 据说著名犹太历史学家 Josephus有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也

m0_57587757的博客 2969

约瑟夫环数组实现

以前貌似写过,但早已忘了。个人觉得约瑟夫环用单链表的话比较好理解,节点出列直接删掉就好,环的循环可以用循环链表。但数组实现的话代码会少一些,所以心血来潮决定用数组来写。 虽然用数组,但逻辑也好理解,被选定的数把它赋值为-1表示出列,下标越界时与数组个数作下模运算即可。代码如下,只在网上找了几个用例测了下无误,但不保证绝对正确(例如要过leetcode的测试): void circle_sort

kakulukia的专栏 1066

2种方法求解约瑟夫环问题

问题:n个人围成一圈缝m报数,数到m的出列,后面的人开始继续从1开始,数到m的出列,问最后剩下的一个人的序号是多少。   一.循环单链表求解 //循环队列求解约瑟夫问题 #include #include typedef struct student { i

ERIC的编程之路 2401
上一篇: C语言数组方式实现 直接插入,冒泡排序,选择排序
下一篇: C语言双向循环链表的生成,删除和打印
卫水金波
博客等级 码龄12年 73粉丝 35原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值