zoukankan      html  css  js  c++  java
  • UVA 196 Spreadsheet 解题报告

    题意:给定你一个表格,其中有些表格是加法表达式,求出这个表格的值并输出

    解题思路:用结构体存储一个格子。先以字符串的形式输入,然后再处理,这里要注意的是加法表达式里面的元素不一定是一个值也有可能是一个表达式,所以要深搜求值

    解题代码:

    // File Name: uva196.c
    // Author: darkdream
    // Created Time: 2013年06月16日 星期日 20时29分05秒
    
    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
    #include<time.h>
    #include<math.h>
    #include<ctype.h>
    
    struct node
    {
      int num;
      int isnum;
      char str[100];
    };
    struct node map[1000][1000];
    int n , m;
    int dfs(int x,int y)
    {
     // printf("%d %d
    ",x,y);
      if(map[x][y].isnum == 1)
      {
        //printf("%d**%d
    ",x,y);
         return map[x][y].num;
        
      }
      int sum = 0 ;
      int tx = 0;
      int ty = 0;
      int len = strlen(map[x][y].str);
      char *p = map[x][y].str;
      for(int i = 1;i <= len; i ++)
      {
         if(i == len || p[i] == '+')
         {
             sum += dfs(ty,tx);
             tx = 0 ;
             ty = 0 ;
             continue;
         }
        if(isalpha(p[i]))
        {
          tx = tx*26 +(p[i] - 'A' + 1);
        }
        else if(isdigit(p[i]))
        {
            
            ty = ty*10 + (p[i] -'0' );
        }
      }
      map[x][y].num = sum; 
      map[x][y].isnum = 1;
      return sum;
      
    }
    int main(){
    
       //freopen("/home/plac/problem/input.txt","r",stdin);
       //freopen("/home/plac/problem/output.txt","w",stdout);
        int t;
        scanf("%d",&t);
        while(t--)
        {
            memset(map,0,sizeof(map));
            scanf("%d %d",&m,&n);
            for(int i = 1; i <= n;i ++)
            {
              for(int j = 1;j <= m ;j ++)
              {  scanf("%s",map[i][j].str);
                
                  if(map[i][j].str[0] != '=')
                  {
                     sscanf(map[i][j].str,"%d",&map[i][j].num);
                     map[i][j].isnum = 1;
                  }
                
              }
            }
           for(int i = 1; i <= n;i ++)
               for(int j = 1; j <= m;j ++)
               {
                   if(map[i][j].isnum == 0)
                     {
                       dfs(i,j);
                     } 
               }
           for(int i =1;i <= n;i ++)
           {
              for(int j =1 ;j <= m; j ++)
              {
                 if(j != 1)
                     printf(" ");
                     printf("%d",map[i][j].num);
              }
              printf("
    ");
           }
        }
    return 0 ;
    }
    View Code
    没有梦想,何谈远方
  • 相关阅读:
    CSS 内外边距
    CSS 边框
    android chrome this account already exists on your device
    linux s s r client ubuntu kali
    rEFInd 美化 windows
    sogou opensuse
    Ping 虚拟机 超时
    python3 批量自动下载对应用户 github上的项目 或者 starts 的项目
    materialize 样例
    opensuse input methods
  • 原文地址:https://www.cnblogs.com/zyue/p/3139447.html
Copyright © 2011-2022 走看看