NTOJ305表达式求值

来源:互联网 发布:网站的数据库是什么 编辑:程序博客网 时间:2024/05/30 04:29

NTOJ35

这个题是第九届ACM的热身赛。



要点:   add( ,)可以想成树  ,左右分别递归即可。

              add  只要检测到a即可 i直接后移

             (  ,  ) 这几个符合可以不考虑,i直接后移


#include<stdio.h>#include<string.h>char an[310];int i,len;int sw( int k ){if(i >=len )return 0;int sum = 0,l = 0,r = 0 ;if(an[i] == 'a'){i=i+4;    k = 1;   // printf("1->");}else if(an[i] == 'm'){ i++; if(an[i] == 'i')  k = 2; else  k = 3; i = i+3;// printf("2->");} else if(an[i] >= '0' && an[i]<='9'){ while(an[i] >= '0' && an[i]<='9') { sum = sum*10 + (an[i]-'0'); i++; }// printf("3->"); return sum; } l = sw(0);     i++;         //, 跳过 r = sw(0);  if(k == 1)     sum = l+r; else if(k == 2) sum = l<r?l:r; else  sum = l>r?l:r;         i++;             //  ) 跳过 return sum;}int main(){int n,j;scanf("%d",&n);for(j = 0;j<n;j++){i = 0;scanf("%s",&an);    len = strlen(an);printf("%d\n",sw(0));}return 0;}


           



0 0
原创粉丝点击