题解 | #矩阵乘法计算量估算#

矩阵乘法计算量估算

https://www.nowcoder.com/practice/15e41630514445719a942e004edc0a5b

构造一个函数,返回括号内计算值和其内的矩阵维度结果
需要注意的是()()情况的出现
#include <stdio.h>
#include <string.h>

char zimu[26]={'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P',
              'Q','R','S','T','U','V','W','X','Y','Z'};
int pos=0;

int cixu(char c)
{
    int i;
    for(i=0;i<26;i++)
        if(c==zimu[i]) return i;
    return 0;
}

int trans(char str[],int in[][2],int b[])//返回运算次数,得到矩阵为b[0]*b[1]
{
    int len=strlen(str);
    int number[100];
    int i=0,j,n;
    b[0]=0;
    b[1]=0;
    int a[2]={0,0};
    while(pos<len)
    {
        if(str[pos]=='('&&str[pos-1]!=')')
        {
            pos++;
            number[i++]=trans(str, in,a);
        }
        
        if(str[pos-1]==')')
        {
            if(a[1]!=0) number[i++]=b[0]*b[1]*a[1];
            if(b[0]==0) b[0]=a[0];
            b[1]=a[1];
            
            a[0]=0;
            a[1]=0;
            
            if('A'<=str[pos]&&str[pos]<='Z')
            {
                n=cixu(str[pos]);
        
                a[0]=in[n][0];
                a[1]=in[n][1];
                if(a[1]!=0) number[i++]=b[0]*b[1]*a[1];
                
                a[0]=0;
                a[1]=0;
            
                if(b[0]==0) b[0]=in[n][0];
                b[1]=in[n][1];
            }
            else if(str[pos]=='(') 
            {    
                pos++;
                number[i++]=trans(str, in,a);
                continue;
            }
        }
        else if('A'<=str[pos]&&str[pos]<='Z')
        {
            n=cixu(str[pos]);
            
            a[0]=in[n][0];
            a[1]=in[n][1];
            if(a[1]!=0) number[i++]=b[0]*b[1]*a[1];
            
            a[0]=0;
            a[1]=0;
            
            if(b[0]==0) b[0]=in[n][0];
            b[1]=in[n][1];
        }
        if(str[pos]==')') 
        {
            pos++;
            break;
        }
        pos++;
    }
    int sum=0;
    for(j=0;j<i;j++) {sum=sum+number[j];}
    return sum;
}

int main()
{
    int n;
    scanf("%d",&n);
    int in[n][2];
    int i;
    for(i=0;i<n;i++) scanf("%d%d",&in[i][0],&in[i][1]);
    char str[100];
    scanf("%s",str);
    
    int a[2]={0,0};
    printf("%d",trans(str, in,a));
    return 0;
}

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务