一道程式設計題:陣列翻轉或者說是陣列迴圈移動。
例如有陣列a:1,2,3,4,5,迴圈左移動2位變成:3,4,5,1,2。
此題的解法很簡單也很巧妙,首先將陣列逆置 變為 5 4 3 2 1 ,然後將陣列分成兩個部分,5,4,3 & 2,1 然後分別繼續逆置兩個部分,即為所求:3 4 5 1 2。(迴圈左移2位,或迴圈右移3位)
根據這個思想編寫**,沒有什麼難點,不過為了優化**也花費了半個小時左右除錯。(後來發現錯了,沒有考慮移動步數大於陣列長度的情況!,漏了關鍵一句step = step%n)
首先是交換函式,運用指標可以改變實參的值:
void swap(int
*p1,int
*p2)
然後定義陣列逆置函式,可以根據起始位置逆置傳入陣列的一部分:
void reversearray(int a,int start,int end)
}
最後定義陣列迴圈左移函式:
void arrayleftmove(int a,int n,int
step)
如果迴圈移動的步數大於了陣列的長度就錯了。所以要加上那句判斷,處理這種情況!
以下是另一種方式,此為迴圈右移:
這是先分兩部分,前後部分各自逆置,然後再整體逆置!
void
reverse( int buffer, int start, int end )
}// 將含有n個元素的陣列buffer右移k位
void rightmovearray( int buffer, int n, int k )
整型陣列左移或右移位簡單操作
函式功能 將陣列元素迴圈左移或右移一位 輸入引數 輸入的陣列 input 輸入陣列的長度 shiftn 取值為 1 或 1 1 表示右移,1表示左移 void shift int input,int n,int shiftn if shiftn 0 int tmain int argc,tchar ...
陣列迴圈左移
本題要求實現乙個對陣列進行迴圈左移的簡單函式 乙個陣列 a中存有 n 個整數,在不允許使用另外陣列的前提下,將每個整數迴圈向左移 m 個位置,即將 a中的資料由 a 0 a 1 a n 1 變換為 a m a n 1 a 0 a 1 a m 1 最前面的 m個數迴圈移至最後面的 m個位置 如果還需要...
陣列迴圈左移
a中存有n 0 個整數,在不允許使用另外陣列的前提下,將每個整數迴圈向左移m 0 個位置,即將 a中的資料由 a 0 a 1 a n 1 變換為 a m a n 1 a 0 a 1 a m 1 最前面的 m個數迴圈移至最後面的 m個位置 如果還需要考慮程式移動資料的次數盡量少,要如何設計移動的方法?...