原理
例如{1, 2, 3, 4, 5, 6, 7,8}要向左平移2个单位
- 先将前两个数据{1,2}反转为{2,1}
- 之后将后面的数据{3,4,5,6,7,8}反转为{8,7,6,5,4,3}
- 两个片段的相对位置没有改变得到了{2,1,8,7,6,5,4,3}
- 最后将总数据进行反转便得到了{3,4,5,6,7,8,1,2}
代码实现
C++实现
#include<iostream>
using namespace std;
void Myreverse(int(&a)[20], int Begin, int End);
int main()
{
int N,Move,a[20];
cin>>N>>Move;
//对Move进行处理
Move = Move % N;
for(int i = 0;i < N;i ++)
{
cin>>a[i];
}
//传进反转的开始和结束的下标
Myreverse(a , 0, Move - 1);
Myreverse(a , Move, N - 1);
Myreverse(a , 0, N - 1);
for(int i = 0;i < N;i ++)
{
cout<<a[i]<<' ';
}
return 0;
}
void Myreverse(int(&a)[20], int Begin, int End)
{
for(int i = Begin;i <= int((Begin + End) / 2);i ++)
{
int m = a[i];
a[i] = a[End - (i - Begin)];
a[End - (i - Begin)] = m;
}
}
python实现(复制后注意修改注释符号为‘#’哦)
// 定义反转函数
def Myreverse(Begin, End):
global a
for i in range(Begin, (Begin + End)//2 + 1):
m = a[i]
a[i] = a[End - (i - Begin)]
a[End - (i - Begin)] = m
//输入数据
term = [int(i) for i in input("请输入长度和左移量:").split()]
a = [int(i) for i in input("请输入数字序列:\n").split()]
length = term[0]
Move = term[1] % length
//进行反转
Myreverse(0, Move - 1)
Myreverse(Move, length - 1)
Myreverse(0, length - 1)
print("数组向左平移 %d 单位后的结果为:\n%s" % (Move, str(a)))
欢迎交流指正
![Alt](https://happyologist.co.uk/wp-content/uploads/happy.jpeg =200x150)
写个博客不容易,可怜可怜博主,点个广告再走呗(✿◕‿◕✿)。