zoukankan      html  css  js  c++  java
  • 河南省第四届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 }
  • 相关阅读:
    Spring学习(九)
    NPOI的一些基本操作
    WebClient请求接口,get和post方法
    树结构关系的数据导出为excel
    AOP实践--利用MVC5 Filter实现登录状态判断
    js小结
    (转)基于http协议的api接口对于客户端的身份认证方式以及安全措施
    C# 下载文件 只利用文件的存放路径来下载
    linux nginx启动 重启 关闭命令
    两种 js下载文件的方法(转)
  • 原文地址:https://www.cnblogs.com/ljmzzyk/p/6722908.html
Copyright © 2011-2022 走看看