1. 程式人生 > >元素逆置

元素逆置

題目描述
設將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;
}

執行結果