數字循環右移 解題報告


數字循環右移


題目如下:

一個數組a中存有n(>0)個整數,將每個整數循環向右移m(≥0)個位置,即將a中的數據由(a​0 a1​​ ⋯a​n−1​​ )變換為(an−m​​ ⋯a​n−1​​ a​0​​ a​1​​ ⋯a​n−m−1​​ )(最后m個數循環移至最前面的m個位置)。

我的思路:

題目明確告訴我們要將每個整數循環向右移動,所以這題可以嵌套循環,逐個移動,容易理解,但效率相對低一點。使用鏈表可以提高效率。解決這個問題我們需要知道用戶傳入數據的數量n以及移動的位數m。

方法一:

創建一個數組保存用戶傳入的數據,每一次循環中先將數組的最后一個數保存到臨時變量里,然后逐個右移賦值,再將臨時變量賦值給第一個數組元素,進行m個循環即可。

流程圖如下:


方法二:

使用尾插法建立一個鏈表存放用戶傳入的數據,先連后斷,先讓表尾指向表頭,再找到指定的位置斷開並把斷開后的下一個結點作為表頭
核心代碼如下:(建立鏈表部分省略)

其中m=m%n是為了減少重復循環,for循環是為了找到需要斷開的結點。
至於流程圖,咕wo咕bu咕hui咕hua。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM