关闭

表达示求值

124人阅读 评论(0) 收藏 举报
分类:

表达式求值nyoj 305

时间限制: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行,每一行对应一个表达式的值。
样例输入
3add(1,2) max(1,999) add(min(1,1000),add(100,99)) 

<span style="font-family:SimSun;font-size:18px;">#include <stdio.h>
#include <string.h>
int add(int a,int b)
{
    return a+b;
}
int min(int a,int b)
{
    
    return a>b?b:a;

}
int max(int a,int b)
{
    return a>b?a:b;
}
int main()
{
    int n,len;
    scanf("%d",&n);
    getchar();
    while(n--)
    {
        char a[301],b[301];
        int c[200],top1,top2,d=0,i,g,f;
        scanf("%s",a);
        len=strlen(a);
        top1=-1;
        top2=-1;
        for(i=0;i<len;i++)
        {
            if(a[i]>=48 && a[i]<=57)
            {
                d=d*10+(a[i]-'0');
            }
            else if(a[i]==')'|| a[i]==',' || i+1==len)//i+1=len 指数字原样//输出
            {
                top2++;
                c[top2]=d;
                d=0;
            }
            else if(a[i]!=')')
            {
                top1++;
                b[top1]=a[i];
            }
            
            if(a[i]==')')
            {
                if(b[top1-1]=='d')
                {
                    g=c[top2];f=c[top2-1];
                    d=add(g,f);

                    top1-=4;
                    top2-=2;
                }
                else if(b[top1-1]=='x')
                {
                    g=c[top2];f=c[top2-1];
                    d=max(g,f);

                    top1-=4;
                    top2-=2;
                    
                }
                else if(b[top1-1]=='n')
                {
                    g=c[top2];f=c[top2-1];
                    d=min(g,f);

                    top1-=4;
                    top2-=2;
                }
                
            }
            if(i+1==len)
            {
                top2+=1;
                c[top2]=d;
            }
            
        }
        printf("%d\n",c[top2]);    
    }
    return 0;
    
}</span>


0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

利用正则表达式对电话号码、邮箱的验证

正则表达式是一个神奇的东西,很多人都喜欢使用正则表达式来进行表单的验证,例如电话号码、邮箱、邮编、非空等的验证,当然,一些简单的验证,你可以使用别人封装好的技术来验证,但是需求中又复杂的验证的话,还是正则表达式会更好用,如果你懂得正则表达式的话,这些验证写起来确实很简单呢,如果不是很懂的话,我这里可...
  • gudayu
  • gudayu
  • 2016-10-21 15:42
  • 1967

使用逆波兰式进行表达式求值

中缀表达式及后缀表达式图解中说明了使用逆波兰式进行表达式求值的方法,这里使用C++进行实现。实现和原理讲解有一点不同,需要进一步进行细化。 关于将中缀表达式转换成后后缀表达式的规则: 规则:从左到右遍历中缀表达式的每个数字和符号,若是数字就输出,即成为后缀表达式的一部分;若是符号,则判断其与栈顶...
  • u012501459
  • u012501459
  • 2015-08-13 23:12
  • 2067

python中的正则表达示

转自http://www.cnblogs.com/sunada2005/archive/2013/05/09/3068693.html
  • weijianying313
  • weijianying313
  • 2015-12-08 14:05
  • 177

中缀表达式求值

转自:点击打开链接 海子   中缀表达式求值问题   中缀表达式的求值问题是一个比较常见的问题之一,我们通常在编写程序时,直接写出表达式让编译器去处理,很少去关心编译器是怎么对表达式进行求值的,今天我们来一起了解一下其中具体的原理和过程。   表达式一般来说有三种...
  • Baoli1008
  • Baoli1008
  • 2015-08-07 16:35
  • 1377

表达式求值算法

编写代码对算术表达式求值的经典方法由 Donald Knuth 描述于 1962 年(请参阅 参考资料)。Knuth 将此概括为三个步骤: 对中缀表达式进行语法分析中缀表达式到后缀表达式的转换对后缀表达式求值 注意到我们谈到的这个经典算法有些简化:算术表达式只包含操作数、二元操...
  • hewei0241
  • hewei0241
  • 2014-04-02 23:36
  • 2051

黑马程序员_正则表达示

------- android培训、java培训、期待与您交流! ---------- |-java.util.regex;   |-Matcher |- find() 查找下一个匹配的子串 |- group() 返回匹配的子串 |- replaceAll 替换 |-P...
  • u011729776
  • u011729776
  • 2014-10-28 16:01
  • 209

表达是求值加强版

经典递归
  • lsl199401
  • lsl199401
  • 2017-03-24 12:58
  • 66

中缀表达式求值

用栈的数据结构来计算表达式的值,很经典
  • u013412497
  • u013412497
  • 2014-10-05 10:47
  • 3510

C++表达式求值(利用数据结构栈)

唉,刚刚用C++又重新写了一个较完善的表达式求值程序,最后精简后程序还不到100行,这不经让我 想到了大一上学期刚学c语言时自己费了好大的劲,写了几百行而且功能还不是很齐全(当时还不能计算有括号的表 达式)的简单计算器程序。刚把两个程序对比了一下,感触还是挺深的,同时也再一次体现了数据结构在程序...
  • u011390632
  • u011390632
  • 2014-05-04 23:47
  • 4672

SQL语句中的正则表达示

正则表达式作用是匹配方本,将一个模式(正则表达式)与一个文本串进行比较。 MySQL用WHERE子句对正则表达式提供了初步的支持,允许你指定用正则表达式过滤SELECT检索出的数据。 MySQL仅支持多数正则表达式实现的一个很小的子集。 ---------------------- 9.2....
  • u012438476
  • u012438476
  • 2017-02-23 13:05
  • 204
    个人资料
    • 访问:52330次
    • 积分:2300
    • 等级:
    • 排名:第18843名
    • 原创:182篇
    • 转载:18篇
    • 译文:0篇
    • 评论:12条