• poj 1472(递归模拟)


    题意:就是让你求出时间复杂度。

    分析:由于指数最多为10次方,所以可以想到用一个数组保存各个指数的系数,具体看代码实现吧!

    代码实现:

    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    
    char str[1000][100];
    char key[100];
    int num;
    
    struct node{
        int sum[15];
        void init()
        {
            memset(sum,0,sizeof(sum));
        }
    };
    
    void init()//把字符串提取出来
    {
        int i,t=1,num=0;
        scanf("%s",key);
        while(t)
        {
            scanf("%s",key);
            strcpy(str[num++],key);
            if(key[0]=='E')
                t--;
            else if(key[0]=='L')
                t++;
        }
    }
    
    struct node xiangcheng(struct node a,struct node b)//相乘
    {
        int i,j;
        struct node res;
        res.init();
        for(i=0;i<=10;i++)
         for(j=0;j<=10;j++)
          res.sum[i+j]=res.sum[i+j]+a.sum[i]*b.sum[j];
        return res;
    }
    
    struct node add(struct node a,struct node b)//相加
    {
        int i;
        for(i=0;i<=10;i++)
         a.sum[i]+=b.sum[i];
        return a;
    }
    
    struct node dfs()
    {
        int i=0;
        struct node a;
        a.init();
        while(1)//碰到END才结束
        {
            i=0;
            if(str[num][0]=='L')
            {
                num=num+1;
                struct node b;
                b.init();
                if(str[num][0]=='n')
                  b.sum[1]++;
                else
                {
                  int k=0;
                  i=0;
                  while(str[num][i]!='')
                  {
                    k=k*10+str[num][i]-'0';
                    i++;
                  }
                  b.sum[0]=b.sum[0]+k;
                }
                num=num+1;
                b=xiangcheng(b,dfs());
                a=add(a,b);
            }
    
            else if(str[num][0]=='O')
            {
                num=num+1;
                if(str[num][0]=='n')
                 a.sum[1]++;
                else
                {
                  int k=0;
                  i=0;
                  while(str[num][i]!='')
                  {
                    k=k*10+str[num][i]-'0';
                    i++;
                  }
                  a.sum[0]=a.sum[0]+k;
                }
            }
    
            else if(str[num][0]=='E')
               return a;
            num++;
        }
    }
    
    int main()
    {
        int T;
        int i,j,flag;
        struct node a;
        scanf("%d",&T);
        getchar();
        for(j=1;j<=T;j++)
        {
            num=0;
            init();
            a=dfs();
            printf("Program #%d
    Runtime = ",j);
            i=10;flag=0;
            while(a.sum[i]==0) i--;
            for(;i>1;i--)
            {
                 if(a.sum[i]==0)
                  continue;
                 if(flag==0)
                 {
                   if(a.sum[i]>1)
                     printf("%d*",a.sum[i]);
                   printf("n^%d",i);
                   flag++;
                 }
                 else
                 {
                   printf("+");
                   if(a.sum[i]>1)
                     printf("%d*",a.sum[i]);
                   printf("n^%d",i);
                 }
            }
            if(a.sum[1])
            {
                if(flag)
                printf("+");
                if(a.sum[1]>1)
                 printf("%d*",a.sum[1]);
                printf("n");
                flag++;
            }
            if(a.sum[0])
            {
              if(flag)
               printf("+");
              printf("%d",a.sum[0]);
              flag++;
            }
            if(flag==0)
             printf("0");
            printf("
    
    ");
        }
        return 0;
    }
  • 相关阅读:
    mongodb简介
    tomcat简介
    date的详细说明
    30岁前成功的12条黄金法则
    2012春晚经典语录
    统计文件中某个单词出现的次数
    nginx简介
    ATM取款机系统模拟仿真
    十三种时间管理方法
    笔试常见的智力题 附答案
  • 原文地址:https://www.cnblogs.com/jiangjing/p/3306129.html
Copyright © 2020-2023  润新知