int new_pos = (pos + delta + 9) % 9 化曲为直算法

公式 int new_pos = (pos + delta + 9) % 9; 是一个常见的 循环数组索引计算 方法,用于处理圆圈排列中的位置计算。这个公式可以总结出一个普遍的规律,适用于任何循环数组或圆圈排列的场景。


普遍规律

假设有一个长度为 ( n ) 的循环数组(或圆圈排列),当前索引为 pos,需要计算移动 delta 步后的新索引 new_pos。公式如下:

				new_pos = (pos + delta + n) \% n
解释:
  1. pos + delta

    • 表示从当前位置 pos 移动 delta 步。
    • delta 可以是正数(向右移动)或负数(向左移动)。
  2. + n

    • 确保 pos + delta 的结果是非负数,避免负数取模的问题。
    • 例如,如果 pos + delta 是负数,加上 n 后会变成正数。
  3. % n

    • 对结果取模,确保新索引在 [0, n-1] 范围内,实现循环效果。

应用场景

这个公式适用于以下场景:

  1. 圆圈排列

    • 例如题目中的 9 只盘子排成一个圆圈。
    • 当移动到第 9 个位置时,下一个位置应该是第 1 个位置(循环)。
  2. 循环数组

    • 例如环形缓冲区、循环队列等数据结构。
    • 当索引超出数组范围时,自动回到数组开头。
  3. 周期性移动

    • 例如模拟时钟的指针移动、周期性任务调度等。

示例

示例 1:圆圈排列

假设有一个长度为 5 的圆圈排列,当前索引为 2,需要向左移动 3 步(delta = -3)。

int n = 5; // 圆圈长度
int pos = 2; // 当前位置
int delta = -3; // 向左移动 3 步int new_pos = (pos + delta + n) % n;
// 计算过程:
// pos + delta = 2 + (-3) = -1
// -1 + 5 = 4
// 4 % 5 = 4
// 结果:new_pos = 4
示例 2:循环数组

假设有一个长度为 4 的循环数组,当前索引为 3,需要向右移动 2 步(delta = 2)。

int n = 4; // 数组长度
int pos = 3; // 当前位置
int delta = 2; // 向右移动 2 步int new_pos = (pos + delta + n) % n;
// 计算过程:
// pos + delta = 3 + 2 = 5
// 5 + 4 = 9
// 9 % 4 = 1
// 结果:new_pos = 1

公式的变体

如果 delta 始终是非负数(例如只向右移动),可以省略 + n 的步骤:

		new_pos = (pos + delta ) \% n
示例:
int n = 5; // 圆圈长度
int pos = 3; // 当前位置
int delta = 4; // 向右移动 4 步int new_pos = (pos + delta) % n;
// 计算过程:
// pos + delta = 3 + 4 = 7
// 7 % 5 = 2
// 结果:new_pos = 2

总结

公式 int new_pos = (pos + delta + n) % n; 是一个通用的循环索引计算方法,适用于任何圆圈排列或循环数组的场景。它的核心思想是通过取模运算实现循环效果,并通过 + n 确保索引始终为非负数。

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

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

相关文章

生成一个日期时间序列,从‘2024-12-03‘开始,每小时递增 oracle 转为达梦

-------------------------------生成一个日期时间序列,从2024-12-03开始,每小时递增---------------------------- ---原oracle : SELECT to_date(2024-12-03, yyyy-mm-dd) (ROWNUM - 1) / 24 data_time FROM dual CO…

前端学习——HTML

VSCode常用快捷键 代码格式化:ShiftAltF 向上或向下移动一行:AltUp或AltDown 快速复制一行代码:ShiftAltUp或者ShiftAltDown 快速替换:CtrlH HTML标签 文本标签 定义着重文字 定义粗体文字 定义斜体文字 加重语气 删除字 无特…

Hadoop之02:MR-图解

1、不是所有的MR都适合combine 1.1、map端统计出了不同班级的每个学生的年龄 如:(class1, 14)表示class1班的一个学生的年龄是14岁。 第一个map任务: class1 14 class1 15 class1 16 class2 10第二个map任务: class1 16 class2 10 class…

C++核心编程之STL

STL初识:从零开始的奇幻冒险 1 STL的诞生:一场代码复用的革命 很久很久以前,在编程的世界里,开发者们每天都在重复造轮子。无论是数据结构还是算法,每个人都得从头开始写,仿佛在无尽的沙漠中寻找绿洲。直到…

【Python】OpenCV算法使用案例全解

OpenCV算法使用案例全解 前言 OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习软件库,它提供了大量的图像和视频处理功能。从简单的图像滤波到复杂的三维重建,OpenCV涵盖了计算机视觉领域的众多算…

Redis的持久化-RDBAOF

文章目录 一、 RDB1. 触发机制2. 流程说明3. RDB 文件的处理4. RDB 的优缺点 二、AOF1. 使用 AOF2. 命令写⼊3. 文件同步4. 重写机制5 启动时数据恢复 一、 RDB RDB 持久化是把当前进程数据生成快照保存到硬盘的过程,触发 RDB 持久化过程分为手动触发和自动触发。 …

Python Cookbook-2.29 带版本号的文件名

任务 如果你想在改写某文件之前对其做个备份,可以在老文件的名字后面根据惯例加上三个数字的版本号。 解决方案 我们需要编写一个函数来完成备份工作: def VersionFile(file_spec, vtypecopy):import os,shutilif os.path.isfile(file_spec):#检查vtype参数if v…

CCF-CSP认证 202104-1灰度直方图

题目描述 思路 首先输入矩阵长度、矩阵宽度和灰度范围&#xff0c;结果数组长度可固定&#xff0c;其中的元素要初始化为0。在输入灰度值的时候&#xff0c;结果数组中以该灰度值为索引的元素值1&#xff0c;即可统计每个灰度值的数量。 代码 C版&#xff1a; #include <…

水果识别系统 | BP神经网络水果识别系统,含GUI界面(Matlab)

使用说明 代码下载&#xff1a;BP神经网络水果识别系统&#xff0c;含GUI界面&#xff08;Matlab&#xff09; BP神经网络水果识别系统 一、引言 1.1、研究背景及意义 在当今科技迅速发展的背景下&#xff0c;人工智能技术尤其是在图像识别领域的应用日益广泛。水果识别作为…

如何在网页上显示3D CAD PMI

在现代制造业中&#xff0c;3D CAD模型已成为产品设计和制造的核心。为了更有效地传达设计意图和制造信息&#xff0c;产品和制造信息&#xff08;PMI&#xff09;被嵌入到3D模型中。然而&#xff0c;如何在网页上清晰、准确地显示这些3D CAD PMI&#xff0c;成为了一个重要的技…

Git基本命令索引

GIT基本命令索引 创建代码库修改和提交代码日志管理远程操作操作分支 创建代码库 操作指令初始化仓库git init克隆远程仓库git clone 修改和提交代码 操作指令查看文件状态git status文件暂存git add文件比较git diff文件提交git commit回滚版本git reset重命名或者移动工作…

基于Selenium的Python淘宝评论爬取教程

文章目录 前言1. 环境准备安装 Python&#xff1a;安装 Selenium&#xff1a;下载浏览器驱动&#xff1a; 2. 实现思路3. 代码实现4. 代码解释5. 注意事项 前言 以下是一个基于 Selenium 的 Python 淘宝评论爬取教程&#xff0c;需要注意的是&#xff0c;爬取网站数据应当遵守…

GenBI 可视化选谁:Python Matplotlib?HTML ?Tableau?

引言 生成式 BI(Generative BI,GenBI)通过自然语言交互和自动化内容生成,革新了数据分析和商业智能(BI)领域。用户可以通过自然语言提问,GenBI 系统自动生成相应的 SQL 查询、获取数据,并以可视化图表、表格、自然语言摘要等形式呈现分析结果。 可视化是 GenBI 的关键…

java后端开发day24--阶段项目(一)

&#xff08;以下内容全部来自上述课程&#xff09; GUI&#xff1a;Graphical User Interface 图形用户接口&#xff0c;采取图形化的方式显示操作界面 分为两套体系&#xff1a;AWT包&#xff08;有兼容问题&#xff09;和Swing包&#xff08;常用&#xff09; 拼图小游戏…

vmware安装firepower ftd和fmc

在vmware虚拟机中安装cisco firepower下一代防火墙firepower threat defence&#xff08;ftd&#xff09;和管理中心firepower management center&#xff08;fmc&#xff09;。 由于没有cisco官网下载账号&#xff0c;无法下载其中镜像。使用eveng模拟器中的ftd和fmc虚拟镜像…

【Java进阶】java设计模式之单例模式

一、单例设计模式的基本概念 在 Java 编程的广阔天地里&#xff0c;单例设计模式宛如一颗璀璨的明星&#xff0c;是一种极为实用的创建型设计模式。它的核心使命是确保一个类在整个应用程序的生命周期内仅仅存在一个实例&#xff0c;并且为外界提供一个全局唯一的访问点来获取…

011 rocketmq过滤消息

文章目录 过滤消息TAG模式过滤FilterByTagProducer.javaFilterByTagConsumer.java SQL表达式过滤FilterBySQLProducer.javaFilterBySQLConsumer.java 类过滤模式&#xff08;基于4.2.0版本&#xff09; 过滤消息 消息过滤包括基于表达式过滤与基于类模式两种过滤模式。其中表达…

【心得】一文梳理高频面试题 HTTP 1.0/HTTP 1.1/HTTP 2.0/HTTP 3.0的区别并附加记忆方法

面试时很容易遇到的一个问题—— HTTP 1.0/HTTP 1.1/HTTP 2.0/HTTP 3.0的区别&#xff0c;其实这四个版本的发展实际上是一环扣一环的&#xff0c;是逐步完善的&#xff0c;本文希望帮助读者梳理清楚各个版本之间的区别&#xff0c;并且给出当前各个版本的应用情况&#xff0c;…

大模型部署与调优:从基础到高效优化全解析

大模型部署与调优&#xff1a;从基础到高效优化全解析 1. 引言 随着深度学习的快速发展&#xff0c;大模型&#xff08;Large Models&#xff09; 在自然语言处理&#xff08;NLP&#xff09;、计算机视觉&#xff08;CV&#xff09;、推荐系统等领域的应用日益广泛。然而&am…

小红书app复制短链,分享链接转直接可访问链接

简介&#xff1a;小红书手机app分享的链接需要点击才能获取完成链接&#xff0c;本文教大家如何通过代码的方式将xhs的短连接转化为长链接。 1.正常我们分享的链接是这样的&#xff1a; 44 小猪吃宵夜发布了一篇小红书笔记&#xff0c;快来看吧&#xff01; &#x1f606; KeA…