内存变量移动算法

// MemoryMovingAlgroithms.cpp :
//name:内存变量移动算法
//MainFunction:LeftMemoryMove(*thestring被移动的字符串,keylength需要移动的字符串的位数,m:左移位数)
//StatlitesFunction1:gcd(m,n)
//StatlitesFunction2:swap(*m,*n)
//StatlitesFunction3:RightMemoryMove(int *thestring,int keylength,int m);
//StatlitesFunction4;MemoryMove(int *thestring;int Keylength,int m)
//Data:2007,1,21.
//All rigths :HeLu.EEI


#include "stdafx.h"
#include "stdlib.h"

extern int gcd(int m,int n){
    if (m<n)
        return gcd(n,m);
    else{
        int tmp=m%n;
        while(tmp!=0){
            m=n;n=tmp;tmp=m%n;
        }
    }
    return n;//unit test 1 passed
}

extern void swap(int *m,int *n){
    int tmp=0;tmp=*m;*m=*n;*n=tmp;
}//unti test2 passed

extern void LeftMemoryMove(int  *thestring,int keylength,int m){
    //*thestring被移动的字符串;keylength需要移动的字符串的位数;m:左移位数
    int i=0;int tmp=0;int j=0;
    m=m%keylength;
    if (m==0) return;//all move
    else{
        m=keylength-m;
        tmp=gcd(keylength,m);
        if (tmp==1){do{i=(m+i)%keylength;
                    swap(thestring,thestring+i);
                    }while(i!=0);
            }
        else{
            for(i=0;i<tmp;i++){
                j=i;
                do{j=(j+m)%keylength;
                swap(thestring+i,thestring+j);
                }while(j!=i);
            }
        }
    }
    return;
}//unit test 3 passed

extern void RightMemoryMove(int *thestring,int keylength,int m){
    int i=0;int tmp=0;int j=0;
    m=m%keylength;
    if (m==0) return;
    else{
    tmp=gcd(keylength,m);
        if(tmp==1){do{i=(m+i)%keylength;
        swap(thestring,thestring+i);
        }
        while(i!=0);
           
        }
    else{for(i=0;i<tmp;i++){
        j=i;
        do{j=(j+m)%keylength;
        swap(thestring+i,thestring+j);
        }while(j!=i);
            }
        }
    }
    return;
}//unit test4 passed

extern void MemoryMove(int *thestring,int keylength,int m,int flag){
    //flag为0:左移;flag非0;右移
    if(flag==0) LeftMemoryMove(thestring,keylength,m);
    else RightMemoryMove(thestring,keylength,m);
}
   







int _tmain(int argc, _TCHAR* argv[])
{   //unit test 1
    /*printf("gcd (12,15) is %d",gcd(12,15));
    printf("gcd (15,12) is %d",gcd(15,12));*/
    //unit test 2
    /*int m=1;int n=2;int *p=&m;int *q=&n;
    swap(p,q);
    printf("the swaped m=1,n=2 is %d,%d",m,n);*/
    //unit test 3
    /*int a[6]={0,1,2,3,4,5};
    int b[6]={0,1,2,3,4,5};
    int c[10]={0,1,2,3,4,5,6,7,8,9};
    LeftMemoryMove(a,6,3);
    LeftMemoryMove(b,6,5);
    LeftMemoryMove(c,10,4);
    printf("a[6]={0,1,2,3,4,5} LeftMemoryMove 3 is :");
    for(int i=0;i<6;i++){
        printf("%d,",a[i]);
    }
    printf("/nb[6]={0,1,2,3,4,5} LeftMemoryMove 5 is :");
    for (int i=0;i<6;i++){
        printf("%d,",b[i]);
    }
    printf("/nc[10]={0,1,2,3,4,5,6,7,8,9} LeftMemoryMove 4 is:");
    for (int i=0;i<10;i++){
        printf("%d,",c[i]);
    }*/
    //unit test4
    /*int a[6]={0,1,2,3,4,5};
    int b[6]={0,1,2,3,4,5};
    int c[10]={0,1,2,3,4,5,6,7,8,9};

    RightMemoryMove(a,6,3);
    RightMemoryMove(b,6,1);
    RightMemoryMove(c,10,4);

    printf("a[6]={0,1,2,3,4,5} rMemoryMove 3 is :");
    for(int i=0;i<6;i++){
        printf("%d,",a[i]);
    }
    printf("/nb[6]={0,1,2,3,4,5} rMemoryMove 1 is :");
    for (int i=0;i<6;i++){
        printf("%d,",b[i]);
    }

    printf("/nc[10]={0,1,2,3,4,5,6,7,8,9} rMemoryMove 4 is:");
    for (int i=0;i<10;i++){
        printf("%d,",c[i]);
    }*/

    system("PAUSE");
    return 0;
}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值