循环左移

设将n(n>1)个整数存放到一位数组R中,设计一个算法,将R中的序列循环左移P(0<P<n)个位置,即将R中数据由{X0,X1,....,Xp-1}变换为{Xp,Xp+1,...,Xn-1,X0,X1,...,Xp-1}

 

要实现R中序列循环左移P个位置,只需先将前P个元素逆置,再将剩下的元素逆置,最后将R中的所有元素逆置即可

#include <iostream>
#define N 50
using namespace std;

void reverse(int R[],int l,int r) {
    int i,j;
    for(i=l,j=r; i<j; i++,j--) {
            int 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);
        reverse(R,p,n-1);
        reverse(R,0,n-1);
    }
}

int main(){
    int L,i;
    int R[N],n;
    cin>>L;
    cin>>n;
    for (i=0;i<n;i++){
        cout<<R[i]<<" ";
    }
    RCR(R,n,L);
    for(i=0;i<n;i++){
        cout<<R[i]<<" ";
    }
    cout<<endl;
    return 0;
}

 

posted @ 2020-02-03 18:15  小怪兽他爹爹  阅读(444)  评论(0编辑  收藏  举报