循环链表的约瑟夫问题(牛客)——C语言解决

循环链表的约瑟夫问题描述

编号为 1 到 n 的 n 个人围成一圈。从编号为 1 的人开始报数,报到 m 的人离开。

下一个人继续从 1 开始报数。

n-1 轮结束以后,只剩下一个人,问最后留下的这个人编号是多少?

数据范围: 1 ≤ n,m≤10000

进阶:空间复杂度 O(1),时间复杂度 O(n)

示例一:

输入:5,2

返回值:3

说明:

开始5个人 1,2,3,4,5 ,从1开始报数,1->1,2->2编号为2的人离开
1,3,4,5,从3开始报数,3->1,4->2编号为4的人离开
1,3,5,从5开始报数,5->1,1->2编号为1的人离开
3,5,从3开始报数,3->1,5->2编号为5的人离开
最后留下人的编号是3      

示例二:

输入:1,1

返回值:1

我们拿示例一做示范黑色为每个人的编号,有5个人,喊道2的人离场(绿色为该人的报道数),继续从一报数,直到剩一人为止。

最后只剩下编号为3 的人。

解题思路:

1.创建一个循环链表,每个节点上的值就为其节点的编号。

2.创建循环过程,用一个count作为计数器,当count==m时,实行链表节点删除,直到剩下一个人为止。

代码

typedef struct SListNode {int val;struct SListNode*next;
}SLNode;SLNode* BuyNode(int i)//创建节点
{SLNode* tmp=(SLNode*)malloc(sizeof(SLNode));if(tmp == NULL){perror("malloc fail!\n");exit(1);}tmp->val = i;//i就是链表节点的编号tmp->next = NULL;return tmp;
}
SLNode* CreatList(int n)//创建n个节点的环形链表
{SLNode* phead = BuyNode(1);SLNode* ptail = phead;for(int i = 2;i <= n; i++){SLNode* pcur=BuyNode(i);ptail->next= pcur;ptail= ptail->next;}//联成环ptail->next=phead;return ptail;//后续需要尾节点和头节点 
}int ysf(int n, int m ) //主体函数
{SLNode* prev=CreatList(n);SLNode* pcur=prev->next;int count=1;while(pcur->next!=pcur)//最后只剩一个人,pcur->next=pcur{   if(count == m){//count=m,实施链表节点的删除SLNode* next=pcur->next;prev->next= next;free(pcur);pcur=next;count = 1;}else{prev = pcur;pcur = pcur->next;count++;}}
//返回最后编号return pcur->val;
}

这个博客如果对你有帮助,给博主一个免费的点赞就是最大的帮助

欢迎各位点赞,收藏和关注哦

如果有疑问或有不同见解,欢迎在评论区留言哦

后续我会一直分享双一流211西北大学软件(C,数据结构,C++,Linux,MySQL)的学习干货以及重要代码的分享

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/522224.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

论文解读:Rectifying the Shortcut Learning of Background for Few-Shot Learning

文章汇总 问题&动机&解决方法 图像背景是一种有害知识的来源&#xff0c;这是少数镜头学习模型容易吸收的(问题) 通过在训练和评估中提取图像中的前景目标而不需要任何额外的监督来解决这个问题(动机) 在训练和评估时将模型的注意力吸引到图像前景上(方法) 摘要 …

OpenTenBase 开发环境搭建及Debug设置

最近有个 OpenTenBase开源核心贡献挑战赛 领导建议大家都去试试&#xff0c;我也去凑了下热闹&#xff0c;发现能力有限一时半会是搞不明白了&#xff0c;最多也就是能搞搞文档翻译&#xff0c;或者写点操作手册啥的。 不过不管怎么样&#xff0c;先把开发环境搭上&#xff0c;…

Zabbix(四)

Zabbix Proxy zabbix作为一个分布式监控系统(分布式监控解决方案)&#xff0c;支持通过代理(proxy)收集zabbix agent的监控数据&#xff0c;然后由zabbix proxy再把数据发送给zabbix server&#xff0c;也就是zabbix proxy 可以代替zabbix server收集监控数据&#xff0c;然后…

Chrome安装Axure插件

打开原型目录/resources/chrome&#xff0c;重命名axure-chrome-extension.crx&#xff0c;修改后缀为rar&#xff0c;axure-chrome-extension.rar 解压到axure-chrome-extension目录打开Chrome&#xff0c;更多工具->扩展程序&#xff0c;打开开发者模式&#xff0c;选择加…

用BIO实现tomcat

一、前言 本课程的难度较高&#xff0c;需要将Servlet原理和IO课程全部学完。 二、当前项目使用方式 (1).自定义servlet 自定义servlet需要实现WebServlet并且实现name和urlMapping 重启进行访问 http://localhost:8090/myServlet (2).自定义html 重启进行访问 http://loc…

洗地机热门品牌测评:石头/希亦/顺造/云鲸洗地机哪个好?哪个牌子最值得入手

大家好&#xff0c;博主是一个热爱生活和科技的居家测评博主。在过去的三年多时间里&#xff0c;我专注于清洁家电——洗地机。我深入测评了三十多款洗地机&#xff0c;现在我将用简单易懂的语言来分享洗地机的选购技巧和热门洗地机机型推荐。 洗地机选购技巧&#xff1a; 看…

在迁移测试中,源表、中间表、目标表的迁移规则

以银行的核心系统从旧核心系统更换为新核心系统为基础&#xff0c;对导入到迁移环境的生产数据&#xff08;已脱敏&#xff09;进行数据的验证。 数据迁移环境 迁移环境需要A、B两套环境。其中&#xff0c;A环境为新系统环境、B环境为老系统环境。 数据迁移小组 迁移小组&a…

图片速览 BitNet: 1-bit LLM

输入数据 模型使用absmax 量化方法进行b比特量化,将输入量化到 [ − Q b , Q b ] ( Q b 2 b − 1 ) \left[-Q_{b},Q_{b}\right](Q_{b}2^{b-1}) [−Qb​,Qb​](Qb​2b−1) x ~ Q u a n t ( x ) C l i p ( x Q b γ , − Q b ϵ , Q b − ϵ ) , Clip ⁡ ( x , a , b ) ma…

浅谈字典攻击

一、前言 字典攻击是一种常见的密码破解方法&#xff0c;它使用预先编制的字典文件作为攻击字典&#xff0c;通过尝试猜测密码的方式来破解密码。下面是一个关于字典攻击的博客&#xff0c;希望能够为您了解字典攻击提供帮助。 二、字典攻击概述 字典攻击是一种密码破解方法&…

Unity笔记:C#基础(1)

杂项 虚函数 CSDN - C虚函数详解 cnblog - C#中的虚函数virtual 常量池与new 在C#中&#xff0c;string是不可变的&#xff0c;这意味着对string对象的操作通常会返回一个新的string对象&#xff0c;而不会修改原始的string对象。因此&#xff0c;几乎所有涉及更改string内…

(未解决)macOS matplotlib 中文是方框

reference&#xff1a; Mac OS系统下实现python matplotlib包绘图显示中文(亲测有效)_mac plt 中文值-CSDN博客 module ‘matplotlib.font_manager‘ has no attribute ‘_rebuild‘解决方法_font_manager未解析-CSDN博客 # 问题描述&#xff08;笑死 显而易见 # solve 找到…

开源文生图大模型Playground v2.5发布:超越SD、DALL·E 3和 Midjourney

前言 在AI技术迅速发展的今天&#xff0c;文生图模型成为了艺术创作、设计创新等领域的重要工具。Playground v2.5的发布&#xff0c;不仅在技术上取得了突破&#xff0c;更在开源文化的推广与实践上迈出了重要一步。 Huggingface模型下载&#xff1a;https://huggingface.co/…