• 河南省第四届ACM省赛(T3) 表达式求值


    表达式求值

    时间限制:3000 ms  |  内存限制:65535 KB
    难度:3
     
    描述

    Dr.Kong设计的机器人卡多掌握了加减法运算以后,最近又学会了一些简单的函数求值,比如,它知道函数min(20,23)的值是20 ,add(10,98) 的值是108等等。经过训练,Dr.Kong设计的机器人卡多甚至会计算一种嵌套的更复杂的表达式。

    假设表达式可以简单定义为:

    1. 一个正的十进制数 x 是一个表达式。

    2. 如果 x 和 y 是 表达式,则 函数min(x,y )也是表达式,其值为x,y 中的最小数。

    3. 如果 x 和 y 是 表达式,则 函数max(x,y )也是表达式,其值为x,y 中的最大数。

    4.如果 x 和 y 是 表达式,则 函数add(x,y )也是表达式,其值为x,y 之和。

    例如, 表达式 max(add(1,2),7) 的值为 7。

    请你编写程序,对于给定的一组表达式,帮助 Dr.Kong 算出正确答案,以便校对卡多计算的正误。

     
    输入
    第一行: N 表示要计算的表达式个数 (1≤ N ≤ 10) 
    接下来有N行, 每行是一个字符串,表示待求值的表达式
    (表达式中不会有多余的空格,每行不超过300个字符,表达式中出现的十进制数都不
    超过1000。)
    输出
    输出有N行,每一行对应一个表达式的值。
    样例输入
    3
    add(1,2) 
    max(1,999) 
    add(min(1,1000),add(100,99)) 
    
    样例输出
    3
    999
    200
    来源

    第四届河南省程序设计大赛

    栈的使用

     1 #include<stdio.h>
     2 #include<stack>
     3 #include<string.h>
     4 using namespace std;
     5 int main() {
     6     stack<int >b;
     7     stack<int >d;
     8     char c[330];
     9     int i,t,j,su,sun,l;
    10     scanf("%d",&t);
    11     getchar();
    12     while(t--) {
    13 
    14 
    15         while(!b.empty()) {    //清空b栈 
    16             b.pop();
    17         }
    18 
    19         while(!d.empty()) {    //清空d栈 
    20             d.pop();
    21         }
    22 
    23         memset(c,0,sizeof(c));
    24         scanf("%s",c);
    25         l=strlen(c);
    26         for(i=0; i<l; i++) {
    27             if(c[i]=='a'&&c[i+1]=='d') {
    28 
    29                 d.push(-1);
    30 
    31             }
    32             
    33             else if(c[i]=='i') {
    34 
    35                 d.push(-2);
    36 
    37             } else if(c[i]=='x') {
    38 
    39                 d.push(-3);
    40 
    41             } else if(c[i]>='0'&&c[i]<='9') {
    42                 sun=0;
    43                 for(j=i; j<l; j++) {
    44 
    45                     if(c[j]<'0'||c[i]>'9') {
    46                         break;
    47                     }
    48                     sun=sun*10+(c[j]-'0');
    49                     i++;
    50                 }
    51                 d.push(sun);
    52             }
    53         }
    54     
    55         while(!d.empty()) {
    56             int aa=0,cc=0,bb=0;
    57             aa=d.top();
    58             d.pop();
    59             if(aa>=0) {
    60                 b.push(aa);
    61             } else {
    62                 cc=b.top();
    63                 b.pop();
    64                 bb=b.top();
    65                 b.pop();
    66 
    67                 if(aa==-1) {
    68                     cc=cc+bb;
    69                 } else if(aa==-2) {
    70                     cc=cc>bb?bb:cc;
    71                 } else if(aa==-3) {
    72                     cc=cc>bb?cc:bb;
    73                 }
    74                 b.push(cc);
    75             }
    76         }
    77         printf("%d
    ",b.top());
    78 
    79     }
    80 
    81     return 0;
    82 
    83 }
  • 相关阅读:
    Hibernate中使用@Lob 注解保存String[] 问题
    具体解释Java虚拟机类载入
    POJ 2631 Roads in the North(树的直径)
    MySQL远程訪问的两个问题
    org.hibernate.LazyInitializationException could not initialize proxy-no Session的解决
    博客搬家啦!
    hdu 5015 233 Matrix (矩阵高速幂)
    Flink内存管理源代码解读之基础数据结构
    UML图与机房收费系统实例
    TextView设置成仅仅读
  • 原文地址:https://www.cnblogs.com/ljmzzyk/p/6722908.html
Copyright © 2020-2023  润新知