zoukankan      html  css  js  c++  java
  • 编程珠玑(二)

    将一个具有n个元素的一维向量向左旋转i个位置,n=8,i=3,abcdefgh--defghabc

    //将一个具有n个元素的一维向量向左旋转i个位置,n=8,i=3,abcdefgh--defghabc
    #include <iostream>
    #include <time.h>
    using namespace std;
    
    //--方法一:先移动一位,然后移动i位即可
    void OneStep(char* ch,int n)
    {
        char t=ch[0];
        for (int i=1;i<n;i++)
            ch[i-1]=ch[i];
        ch[n-1]=t;
    }
    void Moveto(char* ch,int n,int i)
    {
        i=i%n;
        for (int j=0;j<i;j++)
        {
            OneStep(ch,n);
        }
    }
    //--方法二:先将前面部分存储起来,然后移位并复制
    void StoreMove(char* ch,int n, int i)
    {
        int j;
        i%=n;
        char* tmp=new char[i];
        for (j=0;j<i;j++)
        {
            tmp[j]=ch[j];
        }
        for (j=i;j<n;j++)
        {
            ch[j-i]=ch[j];
        }
        for (j=0;j<i;j++)
        {
            ch[n-i+j]=tmp[j];
        }
    }
    //--方法三:先将ch[0]放入t中,然后隔位移动
    void SmallStoreMove(char* ch,int n,int i)
    {
    //    int j;
        i%=n;
    
    }
    //--方法四:不停的翻转
    void Reverse(char* start, char *end)
    {
        char t;
        while (start<=end)
        {
            t=*start;
            *start=*end;
            *end=t;
            start++;
            end--;
        }
    }
    void ReverseMove(char* ch,int n,int i)
    {
        Reverse(ch,ch+i-1);
        Reverse(ch+i,ch+n-1);
        Reverse(ch,ch+n-1);
    }
    void main()
    {
        char ch[]="abcdefgh";
    //    OneStep(ch,8);
    //    Moveto(ch,8,3);
    //    StoreMove(ch,8,3);
    //    Reverse(ch,ch+4);
    
        ReverseMove(ch,8,3);
        
        cout<<ch<<endl;
    
      
    }
  • 相关阅读:
    【Opencv】直方图函数 calchist()
    【Lintcode】070.Binary Tree Level Order Traversal II
    【C++】*p++ = *p不同环境下操作不同
    【Python】String 字符串
    【Python】File IO
    栈和队列
    链表
    printf 的格式
    Linux的基本指令--
    机器人的运动范围
  • 原文地址:https://www.cnblogs.com/lscheng/p/2744669.html
Copyright © 2011-2022 走看看