题目链接:http://acm.zzuli.edu.cn/showproblem?problem_id=1530

偶登博客看有人做此题,便心血来潮想看看,发现诸位尽是用栈或者指针,发现甚是美观,但组织之乱,也不堪入目,于是便以拯救众生之心,想让代码尽量简单:

于是便有了极其简单的思路:

用栈的思想,极其简单的代码解决掉,废话少说,具体代码及注释如下:

View Code
#include<stdio.h>
#include<string.h>
#include<stdlib.h>

int Q_num[1000];//////////用栈的思想存,模拟栈存转换为整数后的数据
char str[1000];/////////最原始的输入的字符串的存储位置
char Q_str[350][5];/////用栈的思想存,模拟栈存提取后的add,min,max
char ch1[10],ch2[10];///临时转换站,ch1[]转换add,min,max  ;  ch2[]转换待转换的数值元素

int MIN(int a,int b)////////////当出现最小的时候返回最小的
{
    if(a>b)
        return b;
    else
        return a;
}
int MAX(int a,int b)//////最大的原理及应用同上
{
    if(a>b)
        return a;
    else
        return b;
}

int main()
{
    int i,j,T,k,p,m1,s1,s2;
    scanf("%d",&T);
    getchar();
    while(T--)
    {
        memset(Q_num,0,sizeof(Q_num));
        gets(str);
        if(str[0]>='0'&&str[0]<='9')
        {
            puts(str);
            continue;
        }
        k=0;
        p=0;
        for(i=0;str[i]!='\0';i++)
        {
            if(str[i]=='a'||str[i]=='m')
            {
                j=0;
                while(str[i]>='a'&&str[i]<='z')
                {
                    ch1[j]=str[i];
                    i++;
                    j++;
                }
                strcpy(Q_str[k],ch1);
                k++;
                i--;////////////////////注意这里的i--,单步调试会有深刻了解
                memset(ch1,0,sizeof(ch1));
            }
            else if(str[i]>='0'&&str[i]<='9')
            {
                j=0;
                while(str[i]>='0'&&str[i]<='9')
                {
                    ch2[j]=str[i];
                    i++;
                    j++;
                }
                m1=atoi(ch2);
                Q_num[p]=m1;
                p++;
                i--;//////////////////////////////注意这里的i--
                memset(ch2,0,sizeof(ch2));
            }
            else if(str[i]==','||str[i]=='(')
            {
                continue;
            }
            else      //////////其实此处的else 就是else if(str[i]==')'),因为在此时要对最顶端的2个元素处理了,    
            {                  ///处理后提取出一个元素,存入Q_num[]
                s1=Q_num[p-1];
                Q_num[p-1]=0;
                p--;
                s2=Q_num[p-1];
                Q_num[p-1]=0;
                p--;
                if(strcmp(Q_str[k-1],"add")==0)
                {
                    Q_num[p]=s1+s2;

                    p++;
                    strcpy(Q_str[k-1]," ");
                }
                else if(strcmp(Q_str[k-1],"min")==0)
                {
                    Q_num[p]=MIN(s1,s2);
                    p++;
                    strcpy(Q_str[k-1]," ");
                }
                else if(strcmp(Q_str[k-1],"max")==0)
                {
                    Q_num[p]=MAX(s1,s2);
                    p++;
                    strcpy(Q_str[k-1]," ");
                }
                k--;
            }

        }
        printf("%d\n",Q_num[0]);
    }
    return 0;
}

 

posted on 2012-05-09 19:37  world_ding  阅读(177)  评论(0编辑  收藏  举报