元素逆置
阿新 • • 發佈:2019-01-08
題目描述
設將n(n>1)個整數存放到一維陣列R中,設計一個演算法,將R中的序列迴圈左移P(0<P<n)個位置,即將R中的資料由{X0,X1,X2,…,Xn-1}變換為{Xp,Xp+1,…,Xn-1,X0,X1,…,Xp-1}。要求:寫出演算法描述
思路分析
要實現R中序列迴圈左移P個位置,只需先將R中前P個元素逆置,再將剩下的元素逆置,最後將R中所有的元素再整體做一次逆置操作即可。
程式碼實現
#include <iostream> #define N 50 using namespace std; // 逆置函式 void Reverse(int R[], int l, int r){ int i,j; // 記錄陣列的下標 int temp; // 定義一個臨時變數 for(i=l,j=r;i<j;++i,--j){ // 交換兩個數字的位置 temp = R[i]; R[i] = R[j]; R[j] = temp; } } void RCR(int R[], int n, int p){ if(p<=0 || p>=n){ cout << "ERROR" << endl; }else{ Reverse(R,0,p-1);//先將R中前P個元素逆置 Reverse(R,p,n-1);//再將剩下的元素逆置 Reverse(R,0,n-1);//最後將R中所有的元素再整體做一次逆置操作即可 } } int main() { int L,i; int R[N],n; cin>>L; cin>>n; for (i = 0; i < n; ++i) { cin>>R[i]; } RCR(R,n,L); for (i = 0; i < n; ++i) { cout<<R[i]<<" "; } cout<<endl; return 0; }
執行結果