金沙国际官网_金沙国际平台登录

因为这个金沙国际官网_金沙国际平台登录网站与很多的大型澳门赌场都有合作,金沙国际官网_金沙国际平台登录尽职尽责,高效执行,保持好奇心,不断学习,追求卓越,点击进入金沙国际官网_金沙国际平台登录马上体验吧,所以现在也正式地开始了营业。

您的位置:金沙国际官网 > 金沙国际平台登录 > 奇数阶魔方矩阵,统计串中最长的重复子串

奇数阶魔方矩阵,统计串中最长的重复子串

发布时间:2020-01-05 02:14编辑:金沙国际平台登录浏览(147)

    对平面魔方的构造,分为三种情况:N为奇数、N为4的倍数、N为其它偶数(4n+2的形式)

     

    #include <stdio.h>
    #include <stdlib.h>
    #define maximum 5
    typedef struct blocklink
    {
        char data[maximum];
        struct blocklink *next;
    }BLOCKLINK;
    int StringlengthBL(BLOCKLINK *h)//整个块链中字符的个数
    {
        BLOCKLINK *p=h;
        int count=0;
        int i=0;
        while(p!=NULL)
        {
            if(i%maximum==0)
                p=p->next;
            if(p!=NULL)
            {
                if(p->data[i%maximum]!='$')
                    count++;
            }
            i++;
        }
        return count;
    }
    int StringLength(char *h)//一个块中链的长度
    {
        int count=0;
        while(h[count]>0)
            count++;
        return count;
    }
    BLOCKLINK *CreatBLink(char *t)//把一个字符数组中的元素存储到块链中
    {
        BLOCKLINK *s,*p,*h;
        int i;
        p=h=(BLOCKLINK *)malloc(sizeof(BLOCKLINK));
        h->next=NULL;
        i=0;
        while(i<StringLength(t))
        {
            if(i%maximum==0)//如果i=0的话那么就新建一个节点
            {
                s=(BLOCKLINK*)malloc(sizeof(BLOCKLINK));
                p->next=s;
                s->next=NULL;
                p=s;
            }
            s->data[i%maximum]=t[i];
            i++;
        }
        while(i%maximum!=0)
        {
            s->data[i%maximum]='$';
            i++;
        }
        return h;
    }
    void Replace(BLOCKLINK *h,char *t,int i)//用t替换由h的第i字符开始的若干串
    {
        int len=StringLength(t);
        if(i<1||i>StringlengthBL(h)||i<0)
        {
            printf("参数不合理,无法完成操作n");
            return;
        }
        BLOCKLINK *p=h;
        int k;
        for(k=0;k<=(i-1)%maximum;k++)//找到第i位置所在的块
            p=p->next;
        int count=0;
        k=(i-1)%maximum;
        while(count<len)
        {
            p->data[k%maximum]=t[count];
            count++;
            k++;
            if(k%maximum==0)
                p=p->next;
        }
    
    }
    void SubStr(BLOCKLINK *h,char *t,int i,int len)
    {
        if(i<1||i>StringlengthBL(h)||len<0||i-1+len>StringlengthBL(h))//从第i 个开始len个字符相当于i-1+len
        {
            printf("参数不合理,无法完成操作!n");
            return;
        }
        BLOCKLINK *p=h;
        int k;
        for(k=0;k<=(i-1)%maximum;k++)
            p=p->next;
        int count=0;
        k=(i-1)%maximum;
        while(count<len)
        {
            if(p->data[k%maximum]!='$')
            {
                t[count]=p->data[k%maximum];
                count++;
            }
            k++;
            if(k%maximum==0)
                p=p->next;
        }
    }
    void StrCon(BLOCKLINK *h,char *t)
    {
        BLOCKLINK *p,*s;
        p=h;
        while(p->next!=NULL)
            p=p->next;
        int i;
        for(i=0;i<StringLength(t);i++)
        {
            if(i%maximum==0)
            {
                s=(BLOCKLINK *)malloc(sizeof(BLOCKLINK));
                p->next=s;
                s->next=NULL;
                p=s;
            }
            p->data[i%maximum]=t[i];
        }
        while(i%maximum!=0)
        {
            s->data[i%maximum]='$';
            i++;
        }
    }
    void DisplayString(BLOCKLINK *h)
    {
        BLOCKLINK *p;
        p=h;
        int count=0;
        int i=0;
        while(p!=NULL)
        {
            if(i%maximum==0)
            {
                p=p->next;
                if(p==NULL)
                    break;
                printf("->");
            }
            printf("%c",p->data[i%maximum]);
            i++;
        }
        printf("n");
    }
    int main()
    {
        BLOCKLINK *b1;
        char c[maximum];
        int i;
        gets(c);
        printf("初始化块链b1n");
        b1=CreatBLink(c);
        DisplayString(b1);
        printf("从第6个字符开始,取4个字符,形成新的串dn");
        char d[maximum];
        int len=4;
        for(i=0;i<len;i++)
            d[i]=NULL;
        SubStr(b1,d,6,len);
        for(i=0;i<StringLength(d);i++)
            printf("%c",d[i]);
        printf("n");
        printf("从b1的第5个字符开始,用串d替代n");
        Replace(b1,d,5);
        DisplayString(b1);
        printf("将串d链接到b1之后n");
        StrCon(b1,d);
        DisplayString(b1);
        printf("b1的长度:");
        printf("%dn",StringlengthBL(b1));
    
        return 0;
    }
    

    N为4的倍数时

    采用对称元素交换法。

    首先把数1到n×n按从上至下,从左到右顺序填入矩阵

    然后将方阵的所有4×4子方阵中的两对角线上的数关于大方阵中心作中心对称交换(注意是各4×4子方阵对角线上的数), 即a(i,j)与a(n-1-i,n-1-j)交换,所有其它位置上的数不变。(或者将对角线不变,其它位置对称交换也可)

    #include <stdio.h>
    #include <stdlib.h>
    #define maximum 30
    void StrInitialization(char *h)
    {
        gets(h);
    }
    int StringLength(char *h)
    {
        int count=0;
        while(h[count]>0)
            count++;
        return count;
    }
    void MaSubStr(char *h,char *t)
    {
        int lenmax=0,len,index=0;
        int i=0,j,k;
        while(i<StringLength(h))
        {
            j=1+1;
            while(j<StringLength(h))
            {
                if(h[i]==h[j])
                {
                    len=1;
                    for(k=0;h[i+k]==h[j+k];k++)
                        len++;
                    if(len>lenmax)
                    {
                        index=i;
                        lenmax=len;
                    }
                    j+=len;
                }
                else
                    j++;
            }
            i++;
        }
        for(i=0;i<lenmax;i++)
            t[i]=h[index+i];
    }
    void DisplayString(char *h)
    {
        int i;
        for(i=0;i<StringLength(h);i++)
            printf("%c",h[i]);
        printf("n");
    }
    int main()
    {
        char str[maximum];
        printf("输入串为:");
        StrInitialization(str);
        printf("n");
        char t[maximum];
        int i;
        MaSubStr(str,t);
        printf("最长重复子串为:");
        DisplayString(str);
        printf("n");
        return 0;
    }
    

    本文由金沙国际官网发布于金沙国际平台登录,转载请注明出处:奇数阶魔方矩阵,统计串中最长的重复子串

    关键词: