巧妙地数组之类的数据平移

最新博客地址,欢迎访问^_^

巧妙的序列型数据平移

原理

例如{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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值