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)以及物理介质的传输方式。它定义了如何在物理媒介上传输原始的比特流,例如通过电缆、光纤或无线传输等。…...

测试微信模版消息推送
进入“开发接口管理”--“公众平台测试账号”,无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息: 关注测试号:扫二维码关注测试号。 发送模版消息: import requests da…...

XCTF-web-easyupload
试了试php,php7,pht,phtml等,都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接,得到flag...

springboot 百货中心供应链管理系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,百货中心供应链管理系统被用户普遍使用,为方…...
深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法
深入浅出:JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中,随机数的生成看似简单,却隐藏着许多玄机。无论是生成密码、加密密钥,还是创建安全令牌,随机数的质量直接关系到系统的安全性。Jav…...

视频字幕质量评估的大规模细粒度基准
大家读完觉得有帮助记得关注和点赞!!! 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用,因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型(VLMs)在字幕生成方面…...
Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!
一、引言 在数据驱动的背景下,知识图谱凭借其高效的信息组织能力,正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合,探讨知识图谱开发的实现细节,帮助读者掌握该技术栈在实际项目中的落地方法。 …...
今日科技热点速览
🔥 今日科技热点速览 🎮 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售,主打更强图形性能与沉浸式体验,支持多模态交互,受到全球玩家热捧 。 🤖 人工智能持续突破 DeepSeek-R1&…...

Java面试专项一-准备篇
一、企业简历筛选规则 一般企业的简历筛选流程:首先由HR先筛选一部分简历后,在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如:Boss直聘(招聘方平台) 直接按照条件进行筛选 例如:…...

分布式增量爬虫实现方案
之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面,避免重复抓取,以节省资源和时间。 在分布式环境下,增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路:将增量判…...

基于Java+MySQL实现(GUI)客户管理系统
客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息,对客户进行统一管理,可以把所有客户信息录入系统,进行维护和统计功能。可通过文件的方式保存相关录入数据,对…...