内存变量移动算法

    技术2022-05-11  144

    // 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 passedextern 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 passedextern 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 passedextern 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;} 


    最新回复(0)