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

C#实现约瑟夫环算法

目录

1.约瑟夫环定义

2.约瑟夫环算法实现需要注意的地方

3.通过一个例子来演示这个过程

4.三人的约瑟夫环示例

4.十二人的约瑟夫环示例


1.约瑟夫环定义

        约瑟夫环即设有n个人坐成一个圈,从某个人开始报数,数到m的人出列,接着从出列的下一个人开始重新报数,数到m的人再次出列,如此反复循环,直到所有人都出列为止,最后按出列顺序输出。

        实现约瑟夫环算法时,最重要的是约瑟夫环的流程。约瑟夫环应该有三个重要的参数、总人数、开始报数的人、第几次报数出列的人。

2.约瑟夫环算法实现需要注意的地方

        在实现约瑟夫环问题时,有一点需要特别注意:当有人出列后,列表中的人数会减少,但下一个报数的起始位置(即index)应该基于剩余的人数进行更新。这意味着在每次有人出列后,我们都需要将index减1,然后再进行(index + 1) % people.Count的操作。

        以下是约瑟夫环算法的逻辑:

  • 初始时,index是起始位置(从index=0开始计数)。
  • 在每次有人出列后,将index减1,以反映列表中人数的减少。
  • 使用(index + 1) % people.Count来找到下一个报数的起始位置。

3.通过一个例子来演示这个过程

        假设有3个人,起始位置是第2个人(index = 1),每次数到2的人出列。

        初始状态:

  • people = [1, 2, 3]
  • index = 1(第2个人)

        第一轮报数:

  • 报数1:当前位置是2,不出列。
  • 报数2:当前位置是3,出列。
  • 更新people = [1, 2]
  • 更新index = (2 - 1) % 2 = 1(因为第3个人出列了,所以剩下的人里第1个人成为新的起始位置)

        第二轮报数:

  • 报数1:当前位置是1,不出列。
  • 报数2:当前位置是2,出列。
  • 更新people = [1]
  • 更新index = (1 - 1) % 1 = 0(因为第2个人出列了,所以剩下的人里第1个人成为新的起始位置,其索引0在编程中通常表示列表的第一个元素)

        第三轮报数:

  • 报数1:当前位置是1,不出列。
  • 报数2:当前位置还是1,出列。(只剩一个人时要报两次数)
  • 更新people = [](所有人都已经出列)

4.三人的约瑟夫环示例

// 3人的约瑟夫
class JosephusProblem
{static void Main(){int n = 3;  // 总人数int m = 2; // 起始位置(从索引1开始计数)int k = 2;  // 报数值List<int> people = [];for (int i = 1; i <= n; i++){people.Add(i);}int index = m - 1; // 转换为0基础的索引while (people.Count > 0){// 找到需要出列的人的索引index = (index + k - 1) % people.Count;// 出列该人并打印int outPerson = people[index];people.RemoveAt(index);Console.WriteLine("出列人的编号是:" + outPerson);}Console.WriteLine("所有人已出列。");}
}
//运行结果:
/*
出列人的编号是:3
出列人的编号是:2
出列人的编号是:1
所有人已出列。*/

4.十二人的约瑟夫环示例

        始终使用index = (index + m - 1) % circle.Count;计算出下一个出列的人的索引。

// 约瑟夫环算法
namespace _149
{class Program{static void Main(string[] args){ArgumentNullException.ThrowIfNull(args);Console.Write("请输入人数n:");int n = int.Parse(Console.ReadLine()!);Console.Write("请输入报数间隔m:");int m = int.Parse(Console.ReadLine()!);Console.Write("请输入开始位置k:");int k = int.Parse(Console.ReadLine()!);List<int> circle = [];for (int i = 0; i < n; i++){circle.Add(i);}int index = k - 1;while (circle.Count > 0){index = (index + m - 1) % circle.Count;int outPerson = circle[index];circle.RemoveAt(index);Console.WriteLine("出列顺序:{0}", outPerson);}}}
}
//运行结果:
/*
请输入人数n:12
请输入报数间隔m:4
请输入开始位置k:3
出列顺序:5
出列顺序:9
出列顺序:1
出列顺序:6
出列顺序:11
出列顺序:4
出列顺序:0
出列顺序:8
出列顺序:7
出列顺序:10
出列顺序:3
出列顺序:2*/

相关文章:

C#实现约瑟夫环算法

目录 1.约瑟夫环定义 2.约瑟夫环算法实现需要注意的地方 3.通过一个例子来演示这个过程 4.三人的约瑟夫环示例 4.十二人的约瑟夫环示例 1.约瑟夫环定义 约瑟夫环即设有n个人坐成一个圈&#xff0c;从某个人开始报数&#xff0c;数到m的人出列&#xff0c;接着从出列的下一…...

游戏服务端配置“热更”及“秒启动”终极方案(golang/ygluu/卢益贵)

游戏服务端配置“热更”及“秒启动”终极方案 ygluu 卢益贵 关键词&#xff1a;游戏微服务架构、游戏服务端热更、模块化解耦、golang 目录 一、前言 二、异步线程加载/重载方案 三、配置表碎片化方案 四、指针间接引用 五、重载通知 六、示例代码 七、相关连接 一、…...

鸿蒙开发的入门

鸿蒙开发的入门 注册并实名认证华为开发者账户 华为官网 注册 有账户可以直接登录 并进行实名认证 下载并安装开发工具 鸿蒙开发使用的语言 java js c/c 仓颉 手机app java 硬件 c/c 应用开发工具的下载地址 Windows(64-bit) 下载地址 程序的运行过程 解析config.j…...

为什么要减少Http的请求以及如何减少Http请求

为什么要减少Http的请求 减少 HTTP 请求的数量是优化网页性能的一个重要策略&#xff0c;原因有以下几点&#xff1a; 1.延迟&#xff1a;每个 HTTP 请求都会有一定的网络延迟。即使数据量很小&#xff0c;请求和响应的往返时间也可能相当长&#xff0c;特别是在网络条件不好…...

Linux性能测试工具整理

性能测试工具&#xff1a;Unixbench lmbench stream iozone fio netperf spec2000 spec2006 一、unixbench unixbench主要是用于系统基础性能测试&#xff0c;unixbench也包含一些非常简单的2D和3D图形测试 UnixBench一个基于系统的基准测试工具&#xff0c;不单纯是CPU 内存 …...

前端路由history路由和hash路由的区别?原理?

前端路由是指在单页应用程序&#xff08;SPA&#xff09;中通过改变 URL 路径来实现页面切换和导航的机制。在前端开发中&#xff0c;有两种主要的前端路由实现方式&#xff1a;基于 History API 的路由&#xff08;history-based routing&#xff09;和基于哈希&#xff08;Ha…...

AcWing 727. 菱形——像拼图一样做题

题目描述] 分析&#xff1a; 利用程序根据输入的整数&#xff0c;画出由字符*构成的该整数阶的实心菱形。给出一个示例&#xff1a; n 7 n7 n7。 * * * * * * * * * * * * * * * * * * * * * * * * * 我们将采取拆解问题&#xff0c;通过四个部分的…...

深入理解生成型大型语言模型:自监督预训练、细调与对齐过程及其应用

分析概述 本文主要介绍了生成型大型语言模型&#xff08;LLM&#xff09;的预训练过程&#xff0c;特别是通过下一个令牌&#xff08;token&#xff09;预测的自监督学习方法&#xff0c;以及后续的细调&#xff08;finetuning&#xff09;和对齐&#xff08;alignment&#x…...

个人简历主页搭建系列-03:Hexo+Github Pages 介绍,框架配置

今天的更新内容主要是了解为什么选择这个网站搭建方案&#xff0c;以及一些前置软件的安装。 Why Hexo? 首先我们了解一下几种简单的网站框架搭建方案&#xff0c;看看对于搭建简历网站的需求哪个更合适。 在 BuiltWith&#xff08;网站技术分析工具&#xff09;上我们可以…...

【堆、位运算、数学】算法例题

目录 十九、堆 121. 数组中的第K个最大元素 ② 122. IPO ③ 123. 查找和最小的K对数字 ② 124. 数据流的中位数 ③ 二十、位运算 125. 二进制求和 ① 126. 颠倒二进制位 ① 127. 位1的个数 ① 128. 只出现一次的数字 ① 129. 只出现一次的数字 II ② 130. 数字范围…...

IDEA 多个git仓库项目放一个窗口

1、多个项目先通过新建module或者CtrlAltShiftS 添加module引入 2、重点是右下角有时候git 分支视图只有一个module的Repositories。这时候需要去设置把多个git仓库添加到同一个窗口才能方便提交代码。 3、如果Directory Mappings已经有相关项目配置&#xff0c;但是灰色的&…...

全球变暖(蓝桥杯,acwing每日一题)

题目描述&#xff1a; 你有一张某海域 NN 像素的照片&#xff0c;”.”表示海洋、”#”表示陆地&#xff0c;如下所示&#xff1a; ....... .##.... .##.... ....##. ..####. ...###. .......其中”上下左右”四个方向上连在一起的一片陆地组成一座岛屿&#xff0c;例如上图就…...

多数据源 - dynamic-datasource | 集成 Quartz 及 ShardingJDBC

文章目录 集成 Quartz引入 quartz-starter配置数据源参数创建任务配置 Quartz 实际使用的数据源方式一: 自定义 SchedulerFactoryBeanCustomizer方式二: 使用@QuartzDataSource来指明quartz数据源集成 ShardingJDBC项目引入 shardingsphere 依赖分别配置shardingjdbc和多数据…...

四连杆机构运动学仿真 | 【Matlab源码+理论公式文本】| 曲柄滑块 | 曲柄摇杆 | 机械连杆

【程序简介】&#x1f4bb;&#x1f50d; 本程序通过matlab实现了四连杆机构的运动学仿真编程&#xff0c;动态展现了四连杆机构的运动动画&#xff0c;同时给出了角位移、角速度和角加速度的时程曲线&#xff0c;除了程序本身&#xff0c;还提供了机构运动学公式推导文档&…...

Lightroom Classic 2024 for mac 中文激活:强大的图像后期处理软件

对于追求极致画面效果的摄影师来说&#xff0c;Lightroom Classic 2024无疑是Mac平台上的一款必备软件。它凭借其强大的功能和出色的性能&#xff0c;赢得了众多摄影师的青睐。 软件下载&#xff1a;Lightroom Classic 2024 for mac 中文激活版下载 在Lightroom Classic 2024中…...

程序员下班以后做什么副业合适?

我就是一个最普通的网络安全工程师&#xff0c;出道快10年了&#xff0c;不出意外地遭遇到瓶颈期&#xff0c;但是凭技术在各大平台挖漏洞副业&#xff0c;硬是妥妥扛过来了。 因为对于程序员来讲&#xff0c;这是个试错成本很低、事半功倍的选择。编程技能是一种强大生产力&a…...

HSE化工应急安全生产管理平台:衢州某巨大型化工企业的成功应用

在化工行业中&#xff0c;安全生产一直是至关重要的议题。为了提高生产安全性、降低成本并提升企业形象&#xff0c;衢州某巨大型化工企业引入了HSE化工应急安全生产管理平台&#xff0c;取得了显著的改善和获益。 该平台的核心功能包括风险管理和应急预案制定。通过对化工生产…...

塑料工厂5G智能制造数字孪生可视化平台,推进塑料行业数字化转型

塑料工厂5G智能制造数字孪生可视化平台&#xff0c;推进塑料行业数字化转型。塑料制造行业作为重要的工业领域&#xff0c;亟需借助这一平台实现产业升级与转型&#xff0c;以适应市场的变化和提高生产效率。传统的塑料制造过程往往存在生产效率低下、资源浪费、环境污染等问题…...

HTML万字学习总结

html文本标签特殊符号图片音频与视频超链接表单列表表格语义标签(布局) html文本标签 标签简介<html></html>根目录<head></head>规定文档相关的配置信息&#xff08;元数据<body></body>元素表示文档的内容<meta></meta>表示…...

Linux网络编程: 以太网帧Frame/ARP/RARP详解

一、TCP/IP五层模型 物理层&#xff08;Physical Layer&#xff09;&#xff1a;物理层是最底层&#xff0c;负责传输比特流&#xff08;bitstream&#xff09;以及物理介质的传输方式。它定义了如何在物理媒介上传输原始的比特流&#xff0c;例如通过电缆、光纤或无线传输等。…...

OpCore-Simplify:如何通过自动化工具降低黑苹果配置的技术门槛

OpCore-Simplify&#xff1a;如何通过自动化工具降低黑苹果配置的技术门槛 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 在非Apple硬件上安装macOS&…...

Whisper.cpp实战指南:在本地设备上构建高效离线语音识别系统

Whisper.cpp实战指南&#xff1a;在本地设备上构建高效离线语音识别系统 【免费下载链接】whisper.cpp Port of OpenAIs Whisper model in C/C 项目地址: https://gitcode.com/GitHub_Trending/wh/whisper.cpp 你是否曾想过在完全离线的环境下实现高质量的语音识别&…...

别再手动编译了!Ubuntu/Debian下apt一键安装配置METIS与ParMETIS(附Python接口pymetis示例)

告别源码编译&#xff1a;Ubuntu/Debian极简安装METIS与ParMETIS全指南 在科学计算和高性能计算领域&#xff0c;图划分算法扮演着至关重要的角色。METIS作为业界公认的标杆工具&#xff0c;其高效的划分算法和稳定的性能表现&#xff0c;使其成为许多分布式计算框架的基础组件…...

Mapbox踩坑实录:图层叠加、图片更新、弹窗样式,这些坑我帮你填平了

Mapbox实战避坑指南&#xff1a;图层管理、动态图片与弹窗优化 第一次在项目中集成Mapbox时&#xff0c;那种兴奋感很快被各种意想不到的报错消磨殆尽。记得凌晨三点调试updateImage方法时&#xff0c;控制台不断抛出"Image dimensions must match"的错误——原来只是…...

像素语言·维度裂变器效果展示:看平庸文本如何“裂变”成精彩内容

像素语言维度裂变器效果展示&#xff1a;看平庸文本如何"裂变"成精彩内容 1. 工具概览&#xff1a;16-bit像素风格的文本增强工坊 像素语言维度裂变器(Pixel Dimension Fissioner)是一款独特的文本增强工具&#xff0c;它将传统AI文本处理的工业感转化为充满游戏趣…...

从控制台到文件:用Fortran读写数据的完整流程(含read/write参数详解)

从控制台到文件&#xff1a;用Fortran读写数据的完整流程&#xff08;含read/write参数详解&#xff09; 在科学计算和工程仿真领域&#xff0c;数据持久化是构建可靠工作流的关键环节。Fortran作为高性能计算的基石语言&#xff0c;其文件操作能力直接影响着科研数据的处理效率…...

告别Unity打包卡顿:手动指定本地Gradle版本完整指南(以Gradle-6.1.1为例)

深度优化Unity构建流程&#xff1a;精准控制Gradle版本的完整实践指南 如果你曾经在Unity打包Android应用时遭遇过"Building Gradle project"卡顿的噩梦&#xff0c;那么这篇文章正是为你准备的。作为一名经历过无数次构建失败的开发者&#xff0c;我深知那种看着进度…...

AI XDR架构与威胁检测:网络安全智能化的下一个十年

总结AI XDR代表了网络安全智能化的重要方向&#xff0c;它能够大幅提升威胁检测的准确性和效率&#xff0c;帮助安全团队从繁重的告警处理中解放出来。但AI XDR并非银弹&#xff0c;需要与人的经验相结合才能发挥最大价值。关注安全&#xff0c;守护数字世界&#xff01;...

【OpenCV 实战】LBP 统计直方图:从纹理特征到图像识别的关键一步

1. 为什么LBP统计直方图是图像识别的秘密武器&#xff1f; 第一次接触LBP&#xff08;局部二值模式&#xff09;时&#xff0c;我盯着那些黑白相间的纹理图看了半天——这不就是把像素点变成01编码吗&#xff1f;直到把统计直方图加进去&#xff0c;才发现这个组合简直是纹理识…...

STM32F407VG驱动OV7670摄像头(无FIFO版)保姆级教程:从接线到显示完整流程

STM32F407VG驱动OV7670摄像头&#xff08;无FIFO版&#xff09;保姆级教程&#xff1a;从接线到显示完整流程 当你第一次拿到OV7670摄像头模块时&#xff0c;可能会被它密密麻麻的引脚吓到。这款售价仅几元的摄像头模块&#xff0c;配合STM32F407VG开发板&#xff0c;可以构建一…...