千家信息网

如何实现C语言版约瑟夫问题算法

发表于:2025-01-18 作者:千家信息网编辑
千家信息网最后更新 2025年01月18日,这篇文章主要为大家展示了"如何实现C语言版约瑟夫问题算法",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"如何实现C语言版约瑟夫问题算法"这篇文章吧。1、问题
千家信息网最后更新 2025年01月18日如何实现C语言版约瑟夫问题算法

这篇文章主要为大家展示了"如何实现C语言版约瑟夫问题算法",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"如何实现C语言版约瑟夫问题算法"这篇文章吧。

1、问题描述:

n个人围坐一圈,现从第s个人开始报数,数到m的人出列,接着从出列的下一个人开始重新报数,数到m的人又出列.如此下去,直到所有人都出列为止.试设计确定他们出列次序序列的程序

2、算法步骤:

1、确定存储结构:n个人围成一圈,故使用循环单链表来存储序号

2、算法实现:

该问题共n、m、s三个未知量,所以可以通过三个循环来实现,第一个循环用来确定最开始第一个报数的人的指针位置(单链表的头节点指针指向第s个人),第二个循环用来控制输出序号的次数(共n次),第三个循环用来数数(每一次循环使指针移动m次)

3、实现源代码:

# include # include  typedef struct Node{        int number;        struct Node * pNext;}NODE, *PNODE; PNODE creat_list(int n); int main (void){        int n,m,s;        printf("约瑟夫环问题:\n");        printf("设有n(编号为"0 1 2 3 .....n-1 n")个人围坐一圈,现从第s个人开始报数,数到m的人出列,\n求最后的出列顺序。\n");        printf("请设置n, s, m :\n");        printf("n = ");        scanf("%d", &n);        printf("s = ");        scanf("%d", &s);        printf("m = ");        scanf("%d", &m);                    //问题引导提示代码段          PNODE pHead = NULL;        pHead = creat_list(n);     pHead->number = 1;                   //创建单链表         PNODE p = pHead;                       //定义头指针        int i,j,k;                            //定义循环参数        for(j = 1; j < s; j++)                {                        p = p->pNext;                }                                //第一个循环确定第一个报数的人在循环单链表中的位置           for(i = 1; i <= n; i++)              //外部循环代表遍历到最后一个所需要的循环次数        {                for(k = 1; k < m; )              //内部循环代表遍历出列的人                {                        if(p -> pNext -> number != 0)                        {                                p = p -> pNext;                                k++;                        }                        else                        {                                p = p -> pNext;                        }                }                printf("%d  ",p -> number);                p -> number = 0;            do                {                    p = p -> pNext;                }while(p -> number == 0);         }        printf("\n");                return 0;}PNODE creat_list(int n)                        //单链表的创建{        PNODE pHead = (PNODE)malloc(sizeof(NODE));    PNODE pTail = pHead;        int i;    for(i = 2; i <= n; i++)        {                PNODE pNew = (PNODE)malloc(sizeof(NODE));                pNew->number = i;                pTail->pNext = pNew;                pNew->pNext = pHead;                pTail = pNew;        }        return pHead;}

以上是"如何实现C语言版约瑟夫问题算法"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

循环 问题 个人 算法 约瑟 约瑟夫 指针 语言 三个 内容 篇文章 位置 序号 次数 存储 学习 帮助 代码 代表 参数 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 代理服务器可以设置几楼 虚拟位置软件开发者选项 能ping通服务器但端口不通 计算机软件开发gb标准 朝阳区软件开发公司电话 滴滴软件开发工资多少 济南服务器管理系统方案 松江区智能软件开发推荐 去制造业做软件开发有前途嘛 外国的网络服务器 长沙有哪些职校有网络安全专业 网络安全 经典书籍 王者服务器编码 qq聊天内容怎么看到服务器 佛山千量网络技术有限公司 中国台州网络技术学院 软件开发企业企业所得税优惠 金融网络安全知识问答 学校网络安全执法检查自查表 安卓 嵌入式数据库 销售管理数据库软件有哪些 舟山软件开发招聘 工作中如何注意网络安全宣传 军营网络安全宣传月讨论 软件开发行业好就业吗 企业软件开发会计分录 戴尔服务器E14S 武汉众生互联网科技有限公司 iis初始化数据库连接失败 绍兴通信网络技术收费标准
0