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.pswp.cn/diannao/72207.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/72207.shtml
英文地址,請注明出處:http://en.pswp.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…