当前位置: 首页 > news >正文

C++ 环形链表(解决约瑟夫问题)

约瑟夫问题描述:

       编号为 1 到 n 的 n 个人围成一圈。从编号为 1 的人开始报数,报到 m 的人离开。下一个人继续从 1 开始报数。n-1 轮结束以后,只剩下一个人,问最后留下的这个人编号是多少?

约瑟夫问题例子:

       开始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。

#include <iostream>using namespace std; typedef struct ListNode
{int value;ListNode* next;ListNode(int val, ListNode* node) : value(val), next(node) {}
}ListNode;ListNode* createList(int nodeNum)
{ListNode* pHead = nullptr;ListNode* pNew = nullptr;for (int i = nodeNum; i > 0; i--){pNew = new ListNode(i, pHead);pHead = pNew;}return pHead;
}ListNode* createCycleList(int nodeNum)
{ListNode* pHead = nullptr;ListNode* pNew = nullptr;ListNode* pTail = nullptr; for (int i = nodeNum; i > 0; i--){	pNew = new ListNode(i, pHead);pHead = pNew;if (i == nodeNum){pTail = pNew;}}pTail->next = pHead;return pHead;
}ListNode* createList(int arr[], int arrLen)
{ListNode* pHead = nullptr;ListNode* pNew = nullptr;for (int i = arrLen - 1; i >= 0; i--){pNew = new ListNode(arr[i], pHead);pHead = pNew;}return pHead;
}void printList(ListNode* pNode)
{while (pNode){std::cout << pNode->value << " ";pNode = pNode->next;}std::cout << std::endl;}ListNode* SloveJosephProblem(ListNode* pHead, int m)
{if (m < 0){return nullptr;}if (!pHead || !pHead->next)return pHead;int inc = 1;//环形链表的判断while (pHead != pHead->next){if (inc == m - 1 ){std::cout << "leaver: " << pHead->next->value << std::endl;pHead->next = pHead->next->next;inc = 1;}else{inc++;}pHead = pHead->next;}pHead->next = nullptr;return pHead;
}int main()
{ListNode* pHead = createCycleList(5);//printList(pHead);ListNode* pLast = SloveJosephProblem(pHead, 2);printList(pLast);return 0;
}

相关文章:

C++ 环形链表(解决约瑟夫问题)

约瑟夫问题描述&#xff1a; 编号为 1 到 n 的 n 个人围成一圈。从编号为 1 的人开始报数&#xff0c;报到 m 的人离开。下一个人继续从 1 开始报数。n-1 轮结束以后&#xff0c;只剩下一个人&#xff0c;问最后留下的这个人编号是多少&#xff1f; 约瑟夫问题例子&#xff1a;…...

【微信小程序】模板语法

数据绑定 对应页面的 js 文件中 定义数据到 data 中&#xff1a; 在页面中使用 {{}} 语法直接使用&#xff1a; 事件绑定 事件触发 常用事件&#xff1a; 事件对象的属性列表&#xff08;事件回调触发&#xff0c;会收到一个事件对象 event&#xff0c;它的详细属性如下&…...

深入了解 C 语言 Bug

目录 一、引言二、Bug的定义三、Bug的由来四、Bug的影响五、应对 Bug 的方法六、结论 一、引言 1、在 C 语言的编程世界中&#xff0c;Bug 是一个我们无法回避的话题。 2、Bug&#xff0c;简单来说&#xff0c;就是程序中存在的错误或缺陷。它可以表现为程序运行结果的异常、崩…...

Redis 内存回收

文章目录 1. 过期key处理1.1 惰性删除1.2 周期删除 2. 内存淘汰策略 Redis 中数据过期策略采用定期删除惰性删除策略结合起来&#xff0c;以及采用淘汰策略来兜底。 定期删除策略&#xff1a;Redis 启用一个定时器定时监视所有的 key&#xff0c;判断key是否过期&#xff0c;过…...

【讲解下ECMAScript和JavaScript之间有何区别?】

&#x1f308;个人主页: 程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…...

Linux基本指令查询硬件信息001

在Linux系统中查询硬件信息可以通过多种命令行工具完成&#xff0c;本章主要讲述如何查询Linux硬件信息。 操作系统&#xff1a; CentOS Stream 9 操作步骤&#xff1a; 指令uname -a : 显示内核版本、硬件名称、操作系统等基本信息。 [rootlocalhost ~]# uname -a Linux …...

Spring Boot(七十四):集成Guava 库实现布隆过滤器(Bloom Filter)

之前在redis(17):什么是布隆过滤器?如何实现布隆过滤器?中介绍了布隆过滤器,以及原理,布隆过滤器有很多实现和优化,由 Google 开发著名的 Guava 库就提供了布隆过滤器(Bloom Filter)的实现。在基于 Maven 的 Java 项目中要使用 Guava 提供的布隆过滤器,只需要引入以…...

二叉查找树详解

目录 二叉查找树的定义 二叉查找树的基本操作 查找 插入 建立 删除 二叉树查找树的性质 二叉查找树的定义 二叉查找树是一种特殊的二叉树&#xff0c;又称为排序二叉树、二叉搜索树、二叉排序树。 二叉树的递归定义如下&#xff1a; &#xff08;1&#xff09;要么二…...

3072. 将元素分配到两个数组中 II

题目 给你一个下标从 1 开始、长度为 n 的整数数组 nums 。 现定义函数 greaterCount &#xff0c;使得 greaterCount(arr, val) 返回数组 arr 中 严格大于 val 的元素数量。 你需要使用 n 次操作&#xff0c;将 nums 的所有元素分配到两个数组 arr1 和 arr2 中。在第一次操…...

城市之旅:使用 LLM 和 Elasticsearch 简化地理空间搜索(二)

我们在之前的文章 “城市之旅&#xff1a;使用 LLM 和 Elasticsearch 简化地理空间搜索&#xff08;一&#xff09;”&#xff0c;在今天的练习中&#xff0c;我将使用本地部署来做那里面的 Jupyter notebook。 安装 Elasticsearch 及 Kibana 如果你还没有安装好自己的 Elasti…...

【知识点】 C++ 构造函数 参数类型为右值引用的模板函数

C 构造函数是一种特殊的成员函数&#xff0c;用于初始化类对象。C 中的构造函数主要分为以下几种类型&#xff1a; 默认构造函数&#xff08;Default Constructor&#xff09;参数化构造函数&#xff08;Parameterized Constructor&#xff09;拷贝构造函数&#xff08;Copy C…...

华为云服务器-云容器引擎 CCE环境构建及项目部署

1、切换地区 2、搜索云容器引擎 CCE 3、购买集群 4、创建容器节点 通过漫长的等待(五分钟左右)&#xff0c;由创建中变为运行中&#xff0c;则表明容器已经搭建成功 购买成功后&#xff0c;返回容器控制台界面 5、节点容器管理 6、创建redis工作负载 7、创建mysql工作负载 8、…...

Linux shell编程学习笔记57:lshw命令 获取cpu设备信息

0 前言 在Linux中&#xff0c;获取cpu信息的命令很多&#xff0c;除了我们已经研究的 cat /proc/cpuinfo、lscpu、nproc、hwinfo --cpu 命令&#xff0c;还有 lshw命令。 1 lshw命令的功能 lshw命令源自英文list hardware&#xff0c;即列出系统的硬件信息&#xff0c;这些硬…...

连山露【诗词】

连山露 雾隐黄山路&#xff0c;十步一松树。 树上惊松鼠&#xff0c;松子衔木屋。 松子青嫩芽&#xff0c;尖尖头探出。 卷挂白露珠&#xff0c;装映黄山雾。...

【Qt】Frame和Widget的区别

1. 这两个伙计有啥区别&#xff1f; 2. 区别 2.1 Frame继承自Widget&#xff0c;多了一些专有的功能 Frame Widget 2.2 Frame可以设置边框...

Python爬虫实战:从入门到精通

网络爬虫&#xff0c;又称为网络蜘蛛或爬虫&#xff0c;是一种自动浏览网页的程序&#xff0c;用于从互联网上收集信息。Python由于其简洁的语法和强大的库支持&#xff0c;成为开发网络爬虫的首选语言。 环境准备 Python安装 必要的库&#xff1a;requests, BeautifulSoup, Sc…...

堆算法详解

目录 堆 二叉堆的实现 二叉堆的插入 二叉堆取出堆顶 &#xff08;extract/delete max&#xff09; 优先对列 (priority queue) 堆的实现 语言中堆的实现 leadcode 题目堆应用 堆 堆是一种高效维护集合中最大或最小元素的数据结构。 大根堆&#xff1a;根节点最大的堆…...

6.6SSH的运用

ssh远程管理 ssh是一种安全通道协议&#xff0c;用来实现字符界面的远程登录。远程复制&#xff0c;远程文本传输。 ssh对通信双方的数据进行了加密 用户名和密码登录 密钥对认证方式&#xff08;可以实现免密登录&#xff09; ssh 22 网络层 传输层 数据传输的过程中是加密的 …...

MySQL-备份(三)

备份作用&#xff1a;保证数据的安全和完整。 一 备份类别 类别物理备份 xtrabackup逻辑备份mysqldump对象数据库物理文件数据库对象&#xff08;如用户、表、存储过程等&#xff09;可移植性差&#xff0c;不能恢复到不同版本mysql对象级备份&#xff0c;可移植性强占用空间占…...

结构体(1)<C语言>

导言 结构体是C语言中的一种自定义类型&#xff0c;它的值&#xff08;成员变量&#xff09;可以是多个&#xff0c;且这些值可以为不同类型&#xff0c;这也是和数组的主要区别&#xff0c;下面将介绍它的一些基本用法&#xff0c;包括&#xff1a;结构体的创建、结构体变量的…...

HW面试应急响应之场景题

(1)dns 报警就一定是感染了吗&#xff1f;怎么处理&#xff1f; 不一定。 引起dns报警的情况有&#xff1a;恶意软件感染&#xff0c;域名劫持&#xff0c;DNS欺骗&#xff0c;DDoS攻击等。 处理方法&#xff1a; 1、分析报警&#xff0c;查看报警类型、源IP地址、目标域名等…...

30-unittest生成测试报告(HTMLTestRunner插件)

批量执行完测试用例后&#xff0c;为了更好的展示测试报告&#xff0c;最好是生成HTML格式的。本文使用第三方HTMLTestRunner插件生成测试报告。 一、导入HTMLTestRunner模块 这个模块下载不能通过pip安装&#xff0c;只能下载后手动导入&#xff0c;下载地址是&#xff1a;ht…...

鸿蒙北向开发 IDE DevEco Studio 3.1 傻瓜式安装闭坑指南

首先下载 安装IDE 本体程序 DevEco Studio 下载链接 当前最新版本是3.1.1,下载windows版本的 下载下来后是一个压缩包, 解压解锁包后会出现一个exe安装程序 双击运行安装程序 一路 next ( 这里涉及安装文件目录,我因为C盘够大所以全部默认了,各位根据自己情况选择自己的文件…...

Oracle数据库面试题-9

81. 请解释Oracle数据库中的林业数据处理方法。 Oracle数据库中的林业数据处理 在Oracle数据库中处理林业数据涉及到存储、管理、分析和可视化与林业相关的数据。以下是林业数据处理的一些关键方面以及如何使用Oracle数据库进行示例性的SQL说明&#xff1a; 数据库设计&#…...

跟着小白学linux的基础命令

小白学习记录&#xff1a; 前情提要&#xff1a;Linux命令基础格式!查看 lsLinux 的7种文件类型及各颜色代表含义 进入指定目录 cd查看当前工作目录 pwd创建一个新的目录(文件夹&#xff09; mkdir创建文件 touch查看文件内容 cat、more操作文件、文件夹- 复制 cp- 移动 mv- 删…...

2024-06-08 Unity 编辑器开发之编辑器拓展9 —— EditorUtility

文章目录 1 准备工作2 提示窗口2.1 双键窗口2.2 三键窗口2.3 进度条窗口 3 文件面板3.1 存储文件3.2 选择文件夹3.3 打开文件3.4 打开文件夹 4 其他内容4.1 压缩纹理4.2 查找对象依赖项 1 准备工作 ​ 创建脚本 “Lesson38Window.cs” 脚本&#xff0c;并将其放在 Editor 文件…...

Mac下删除系统自带输入法ABC,正解!

一、背景说明 MacOS 在 14.2 以下的系统存在中文输入法 BUG&#xff0c;会造成系统卡顿&#xff0c;出现彩虹圆圈。如果为了解决这个问题&#xff0c;有两种方法&#xff1a; 升级到最新的 14.5 系统使用第三方输入法 在使用第三方输入法的时候&#xff0c;会发现系统自带的 …...

redis学习路线

待更新… 一、nosql讲解 1. 为什么要用nosql&#xff1f; 用户的个人信息&#xff0c;社交网络&#xff0c;地理位置&#xff0c;自己产生的数据&#xff0c;日志等等爆发式增长&#xff01;传统的关系型数据库已无法满足这些数据处理的要求&#xff0c;这时我们就需要使用N…...

数据库练习题

1行程和用户 表&#xff1a;Trips ----------------------- | Column Name | Type | ----------------------- | id | int | | client_id | int | | driver_id | int | | city_id | int | | status | enum | | request_at…...

【每日一函数】uname 函数介绍及代码演示

Linux uname 函数介绍及代码演示 引言 Linux 系统中&#xff0c;uname 是一个常用的命令行工具&#xff0c;用于显示系统信息。然而&#xff0c;在编程过程中&#xff0c;我们有时需要在程序中获取这些信息&#xff0c;此时就可以使用 uname 函数。本文将对 uname 函数进行详…...

网上学设计哪个网站好/网页开发工具

点击上方蓝字关注我们在射频 /微波/毫米波测试中&#xff0c;除了同轴和波导互连器件之外&#xff0c;还有其他两种与DUT交互的主要器件。它们包括连接到元件引线或微带焊盘的表面探针&#xff0c;以及设计用于测试的天线。测试探针和天线所适用的测试类型差异巨大&#xff0c;…...

公司网站选择什么空间/免费代理浏览网页

大臣的旅费 时间限制&#xff1a;1.0s 内存限制&#xff1a;256.0MB问题描述很久以前&#xff0c;T王国空前繁荣。为了更好地管理国家&#xff0c;王国修建了大量的快速路&#xff0c;用于连接首都和王国内的各大城市。 为节省经费&#xff0c;T国的大臣们经过思考&#xff…...

佛山网站建设哪个好点/宣传推广计划

开发中复杂嵌套时&#xff0c;时常会导致父级事件操作累积在子级身上&#xff0c;相当于子级事件重复执行&#xff0c;即事件累积。类似于定时器的多次叠加 e.g. HTML&#xff1a; 1 <div> 2 <span>123</span> 3 </div> jQuery&#xff…...

建设银行网站怎么查开户行/上海网站营销推广

很多朋友对DOM有感冒&#xff0c;这里我花了一些时间写了一个小小的教程&#xff0c;这个能看懂&#xff0c;会操作了&#xff0c;我相信基于DOM的其它API&#xff08;如JDOM&#xff0c;DOM4J等&#xff09;一般不会有什么问题。 后附java代码&#xff0c;也可以下载&#xff…...

莆田网站制作/百度排名点击软件

计算原理&#xff1a;根据勾股定理算两个坐标直线距离 java版本 package com.application.util;/*** 地图坐标距离计算**/ public class LocationUtils {private static double EARTH_RADIUS 6378.137;private static double rad(double d) {return d * Math.PI / 180.0;}/***…...

视频直播网站开发流程/如何提高网站排名seo

1、转换图片格式要用到一个叫做ImageMagick的软件&#xff0c;安装后&#xff0c;进入控制台(运行-->cmd)&#xff0c;进入图片所在目录&#xff0c;以a.bmp文件为例&#xff0c;convert a.bmp fig1.eps2、编辑.tex文件加入包\usepackage{graphicx}\usepackage{float}插入图…...