机试——数组元素循环左移
文章目录
- 数组元素循环左移
- 理论
- 代码
- 代码输出
数组元素循环左移
理论
循环左移pos位,即将数组中的每个元素下标向前移动pos位,其中前面没有位置的数组元素循环移位到数组的末尾
如下图,长度为4的数组循环左移一位,即a1-a3分别移位到数组的第1-3位,而a0则移位到第4位

而我们今天要谈的是【将一维数组中的元素循环左移P个元素】
题目大致如下:设将n(n>1)个整数存放到一维数组R中,设计一个算法,将R中的序列循环左移P(0
从{X0,X1,…,Xn-1}变换为{Xp,Xp+1,…,Xn-1,X0,X1,…,Xp-1}需要3步:
(1){X0,X1,…,Xp-1}数组前部分逆转位置
(2){Xp,Xp+1,…,Xlen-1}数组后一部分逆转位置
(3){X0,X1,…,Xlen-1}整个数组逆转位置
从而我们可以将这种思想归纳为函数cycleLeft(int arr[],int len,int pos)
鉴于逆转的操作比较独立且语句不少,因而我们单独为其构造一个reverse(int arr[],int begin,int end)逆转函数
逆转数组元素如下图所示,需要引入一个过渡变量temp暂存要转换的其中一个元素

代码
//数组元素循环左移
#include <iostream>
#include <cmath>
#include <cstring>
using namespace std;//逆置代码
void reverse(int arr[],int begin,int end){int i,j;for(i = begin,j = end;i < j;i++,j--){int temp = arr[i];arr[i] = arr[j];arr[j] = temp;}
}
//循环左移代码,arr为操作数组,len为数组长度,pos为为移动位数
void cycleLeft(int arr[],int len,int pos){reverse(arr,0,pos-1);reverse(arr,pos,len-1);reverse(arr,0,len-1);
}
int main(){int len,arr[1010];cout<<"请输入数组长度与数据:"<<endl;cin>>len;for(int i=0;i<len;i++){cin>>arr[i];}cout<<"循环左移之前的数组为:";for(int i=0;i<len-1;i++){cout<<arr[i]<<" ";}cout<<arr[len-1]<<endl;cout<<"请输入循环左移的位数:";int CLnum;cin>>CLnum;cycleLeft(arr,len,CLnum);cout<<"循环左移之后的数组为:";for(int i=0;i<len-1;i++){cout<<arr[i]<<" ";}cout<<arr[len-1]<<endl;return 0;
}
代码输出

本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
