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个人坐成一个圈,从某个人开始报数,数到m的人出列,接着从出列的下一…...
游戏服务端配置“热更”及“秒启动”终极方案(golang/ygluu/卢益贵)
游戏服务端配置“热更”及“秒启动”终极方案 ygluu 卢益贵 关键词:游戏微服务架构、游戏服务端热更、模块化解耦、golang 目录 一、前言 二、异步线程加载/重载方案 三、配置表碎片化方案 四、指针间接引用 五、重载通知 六、示例代码 七、相关连接 一、…...
鸿蒙开发的入门
鸿蒙开发的入门 注册并实名认证华为开发者账户 华为官网 注册 有账户可以直接登录 并进行实名认证 下载并安装开发工具 鸿蒙开发使用的语言 java js c/c 仓颉 手机app java 硬件 c/c 应用开发工具的下载地址 Windows(64-bit) 下载地址 程序的运行过程 解析config.j…...
为什么要减少Http的请求以及如何减少Http请求
为什么要减少Http的请求 减少 HTTP 请求的数量是优化网页性能的一个重要策略,原因有以下几点: 1.延迟:每个 HTTP 请求都会有一定的网络延迟。即使数据量很小,请求和响应的往返时间也可能相当长,特别是在网络条件不好…...
Linux性能测试工具整理
性能测试工具:Unixbench lmbench stream iozone fio netperf spec2000 spec2006 一、unixbench unixbench主要是用于系统基础性能测试,unixbench也包含一些非常简单的2D和3D图形测试 UnixBench一个基于系统的基准测试工具,不单纯是CPU 内存 …...
前端路由history路由和hash路由的区别?原理?
前端路由是指在单页应用程序(SPA)中通过改变 URL 路径来实现页面切换和导航的机制。在前端开发中,有两种主要的前端路由实现方式:基于 History API 的路由(history-based routing)和基于哈希(Ha…...
AcWing 727. 菱形——像拼图一样做题
题目描述] 分析: 利用程序根据输入的整数,画出由字符*构成的该整数阶的实心菱形。给出一个示例: n 7 n7 n7。 * * * * * * * * * * * * * * * * * * * * * * * * * 我们将采取拆解问题,通过四个部分的…...
深入理解生成型大型语言模型:自监督预训练、细调与对齐过程及其应用
分析概述 本文主要介绍了生成型大型语言模型(LLM)的预训练过程,特别是通过下一个令牌(token)预测的自监督学习方法,以及后续的细调(finetuning)和对齐(alignment&#x…...
个人简历主页搭建系列-03:Hexo+Github Pages 介绍,框架配置
今天的更新内容主要是了解为什么选择这个网站搭建方案,以及一些前置软件的安装。 Why Hexo? 首先我们了解一下几种简单的网站框架搭建方案,看看对于搭建简历网站的需求哪个更合适。 在 BuiltWith(网站技术分析工具)上我们可以…...
【堆、位运算、数学】算法例题
目录 十九、堆 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已经有相关项目配置,但是灰色的&…...
全球变暖(蓝桥杯,acwing每日一题)
题目描述: 你有一张某海域 NN 像素的照片,”.”表示海洋、”#”表示陆地,如下所示: ....... .##.... .##.... ....##. ..####. ...###. .......其中”上下左右”四个方向上连在一起的一片陆地组成一座岛屿,例如上图就…...
多数据源 - dynamic-datasource | 集成 Quartz 及 ShardingJDBC
文章目录 集成 Quartz引入 quartz-starter配置数据源参数创建任务配置 Quartz 实际使用的数据源方式一: 自定义 SchedulerFactoryBeanCustomizer方式二: 使用@QuartzDataSource来指明quartz数据源集成 ShardingJDBC项目引入 shardingsphere 依赖分别配置shardingjdbc和多数据…...
四连杆机构运动学仿真 | 【Matlab源码+理论公式文本】| 曲柄滑块 | 曲柄摇杆 | 机械连杆
【程序简介】💻🔍 本程序通过matlab实现了四连杆机构的运动学仿真编程,动态展现了四连杆机构的运动动画,同时给出了角位移、角速度和角加速度的时程曲线,除了程序本身,还提供了机构运动学公式推导文档&…...
Lightroom Classic 2024 for mac 中文激活:强大的图像后期处理软件
对于追求极致画面效果的摄影师来说,Lightroom Classic 2024无疑是Mac平台上的一款必备软件。它凭借其强大的功能和出色的性能,赢得了众多摄影师的青睐。 软件下载:Lightroom Classic 2024 for mac 中文激活版下载 在Lightroom Classic 2024中…...
程序员下班以后做什么副业合适?
我就是一个最普通的网络安全工程师,出道快10年了,不出意外地遭遇到瓶颈期,但是凭技术在各大平台挖漏洞副业,硬是妥妥扛过来了。 因为对于程序员来讲,这是个试错成本很低、事半功倍的选择。编程技能是一种强大生产力&a…...
HSE化工应急安全生产管理平台:衢州某巨大型化工企业的成功应用
在化工行业中,安全生产一直是至关重要的议题。为了提高生产安全性、降低成本并提升企业形象,衢州某巨大型化工企业引入了HSE化工应急安全生产管理平台,取得了显著的改善和获益。 该平台的核心功能包括风险管理和应急预案制定。通过对化工生产…...
塑料工厂5G智能制造数字孪生可视化平台,推进塑料行业数字化转型
塑料工厂5G智能制造数字孪生可视化平台,推进塑料行业数字化转型。塑料制造行业作为重要的工业领域,亟需借助这一平台实现产业升级与转型,以适应市场的变化和提高生产效率。传统的塑料制造过程往往存在生产效率低下、资源浪费、环境污染等问题…...
HTML万字学习总结
html文本标签特殊符号图片音频与视频超链接表单列表表格语义标签(布局) html文本标签 标签简介<html></html>根目录<head></head>规定文档相关的配置信息(元数据<body></body>元素表示文档的内容<meta></meta>表示…...
Linux网络编程: 以太网帧Frame/ARP/RARP详解
一、TCP/IP五层模型 物理层(Physical Layer):物理层是最底层,负责传输比特流(bitstream)以及物理介质的传输方式。它定义了如何在物理媒介上传输原始的比特流,例如通过电缆、光纤或无线传输等。…...
通过C#编程开发西门子PLC系统的诊断与故障排查工具
在工业自动化领域,PLC(可编程逻辑控制器)是自动化控制系统的核心,广泛应用于各类生产线、设备及工厂的管理控制中。西门子作为全球领先的自动化控制系统提供商,其PLC产品(如S7-1200、S7-1500系列࿰…...
紧急预警:Dify v0.12.3升级后Webhook签名机制变更!3类存量集成即将失效(附热修复补丁)
第一章:紧急预警:Dify v0.12.3升级后Webhook签名机制变更!3类存量集成即将失效(附热修复补丁) Dify v0.12.3 版本于 2024-06-15 正式发布,核心变更之一是强制启用 RFC 8941 兼容的 Webhook 签名验证机制&am…...
NoMachine vs. 其他远程工具:实测Ubuntu到Win10的延迟与画质,附分辨率自适应设置
NoMachine远程桌面性能深度评测:Ubuntu与Windows跨平台实战指南 远程办公和跨平台协作已成为现代工作流的重要组成部分。在众多远程桌面解决方案中,NoMachine以其独特的NX协议技术脱颖而出,尤其在处理高延迟网络环境时表现卓越。本文将深入评…...
乙巳马年春联生成终端惊艳效果:生成结果嵌入NFT合约的区块链版权存证演示
乙巳马年春联生成终端惊艳效果:生成结果嵌入NFT合约的区块链版权存证演示 1. 引言:当传统春联遇见前沿科技 春节贴春联,是传承千年的文化习俗。一副好春联,不仅寄托着人们对新年的美好祝愿,更是一件凝聚了智慧与美感…...
KUKA C2机器人IO配置保姆级教程:从端子接线到示教器设置,一次搞定
KUKA C2机器人IO配置全流程实战指南:从硬件连接到软件调试 第一次面对KUKA C2控制柜里密密麻麻的接线端子时,我和大多数新手一样感到手足无措。记得三年前在汽车焊接产线调试时,因为一个终端电阻接错位置,导致整个DEVNET网络瘫痪了…...
别再手动翻官网了!用Python脚本自动爬取CKEditor历史漏洞与安全更新(附完整代码)
高效获取CKEditor安全情报:Python自动化爬虫实战指南 每次安全审计前,团队总要花几小时手动翻找CKEditor的漏洞公告?作为经历过这种低效工作模式的安全工程师,我开发了一套自动化解决方案。这个工具不仅能抓取所有历史漏洞&#x…...
Windhawk完全指南:免费开源Windows系统定制工具终极教程
Windhawk完全指南:免费开源Windows系统定制工具终极教程 【免费下载链接】windhawk The customization marketplace for Windows programs: https://windhawk.net/ 项目地址: https://gitcode.com/gh_mirrors/wi/windhawk Windhawk是一款完全免费开源的Windo…...
别再source错了!ROS2工作空间环境变量配置保姆级避坑指南(含ROS1/ROS2共存场景)
ROS2工作空间环境变量配置全攻略:从基础到多版本共存实战 每次打开终端都要source环境变量?ROS1和ROS2的命令总是冲突?工作空间里的包莫名其妙被覆盖?如果你正在经历这些困扰,这篇文章将彻底解决你的痛点。作为机器人…...
别再对着HDF5文件发愁了!用Matlab读取gprMax的out文件,这份保姆级教程帮你搞定
从零掌握gprMax仿真数据:Matlab解析HDF5格式的完整实战指南 地质雷达仿真数据处理的第一个拦路虎,往往是那个神秘的.out文件。作为gprMax软件的输出结果,它采用HDF5格式存储,这种结构化的数据容器虽然高效,却让不少初学…...
从入门到放弃?ABAP PARAMETERS避坑指南:那些官方文档没细说的‘坑’与最佳实践
ABAP PARAMETERS实战避坑指南:那些官方文档没告诉你的细节 第一次在ABAP选择屏幕上使用PARAMETERS时,我天真地以为这不过是个简单的输入框定义。直到项目上线后,用户反馈"为什么我的输入总被改成大写?"、"必填项提…...
