序列型数据平移

原理

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

写个博客不容易,可怜可怜博主,点个广告再走呗(✿◕‿◕✿)。


   转载规则


《序列型数据平移》 ZS 采用 知识共享署名 4.0 国际许可协议 进行许可。
 上一篇
超长字符串的商 超长字符串的商
原理 例如{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} 两个片段的相对位置没有改变得到了
2019-02-18
下一篇 
快速素数判断算法 快速素数判断算法
最近在复习之前做的编程练习题,素数判断一直没有掌握,今天看到了一种新的方法,感觉特别好,记下来。(第一次写博客,很开心呀)思想来源,看不懂我的,欢迎看原作 素数的一些性质吧 素数的分布规律大于5的素数一定于6的倍数相邻,例如5和7,11
2019-02-17
  目录