题目描述
设将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;
}
运行结果