zoukankan      html  css  js  c++  java
  • 数组移位

    题目:一个数组A中存有N(N>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移动M位(M>=0),将数组(A1A2...An-1An)变化成(An-mAn-m+1...A1...An-m-1)。

    书本上提供的方法是:(1)每次向右移动一位,移动M次。移动次数N*M。

              (2)先将数组倒序,再局部倒序两次。即(A1....An)->(An...A1)->(An-m...AnAn-m-1....A1)->(An-mAn-m+1...A1...An-m-1)。移动次数3N次。

    自创方法,跳变法。将原始位装入m位后的位置,m位数据寄存在temp中,再往右m位。如果回到原始起点并且计算次数未达数组长度,则原始位+1继续上述过程。当计算次数等于数组长度的时候,过程结束。大约使用N次交换。

    //研究跳变的数组下标是否有重复
    
    void countingIndex()
    {
        int a=0;
        int a1=0;
        int b=10;
        int c=9;
        int i=0;
        while(1)
        {
            cout<<a<<endl;
            i++;
            a+=c;
            if(a>(b-1))
                a=a-b;
            if(a==a1 && i!=b)
            {
                a+=1;
                a1+=1;
            }
            else if(i==b)
                break;
                
        }
        cout<<"次数:"<<i<<endl;
    }

      

    //数组移动---改变数组结构版本
    void Arraymoving1(int a[],int M,int N)
    {
        if(M==0)
            return;
        else if(M%N==0)
            return;
        else
        {
            int begin=0;
            int mark=0;
            int b=N;
            int c=M%N;//处理成小于长度的余数
            int i=0;
            int temp=a[begin];
            while(1)
            {
                //当前状态
    
    
                i++;
                //跳转状态+M
                begin+=c;        
                if(begin>(b-1))
                    begin=begin-b;
                //交换
    
    
                swapNumber(temp,a[begin]);
    
    
                if(begin==mark && i!=b)
                {
                    begin+=1;
                    mark+=1;
                    temp=a[begin];
                }
                else if(i==b)
                    break;        
            }
            cout<<"次数:"<<i<<endl;
            return;
        }
    }

      

  • 相关阅读:
    【2017 Multi-University Training Contest
    【“玲珑杯”ACM比赛 Round #20 H】康娜的数学课
    【hdu 6181】Two Paths
    Cache coherence protocol
    C#实现图片的无损压缩
    收集一些常用的正则表达式
    收集一些常用的正则表达式
    收集一些常用的正则表达式
    Sql中存储过程的定义、修改和删除操作
    Sql中存储过程的定义、修改和删除操作
  • 原文地址:https://www.cnblogs.com/chentingk/p/5368558.html
Copyright © 2011-2022 走看看