【ACM】nyoj_305_表达式求值_201308081018

表达式求值
时间限制: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

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

 

 

#include <stdio.h>
#include <string.h>

char str[1100];
char a[1100];
int b[1100];

int count(int a,int b,char c)
{
    if(c=='a')
    return a>b?a:b;
    if(c=='d')
    return a+b;
    if(c=='i')
    return a<b?a:b;
}
int main()
{
    int N;
    scanf("%d",&N);
    while(N--)
    {
        int i,atop,btop,t;
        memset(str,0,sizeof(str));
        memset(a,0,sizeof(a));
        memset(b,0,sizeof(b));
        atop=btop=1;
        scanf("%s",str);
        for(i=0;i<strlen(str);)
        {
            if(str[i]>='a'&&str[i]<='z')
            {
                i++;
                if(str[i]=='d')
                a[atop++]='d';
                else if(str[i]=='a')
                a[atop++]='a';
                else if(str[i]=='i')
                a[atop++]='i';
                i+=2;
            }  //将 三种运算进栈,
            else if(str[i]=='('||str[i]==',')
            i++;
            else if(str[i]>='0'&&str[i]<='9')
            {
                t=0;
                while(str[i]>='0'&&str[i]<='9')
                {
                    t=t*10+str[i]-'0';
                    i++;
                }// 将数字进栈
                b[btop++]=t;
    //printf("%d\n",i);
            }
            else if(str[i]==')') //如果出现右括号,则拿出两个数字和一个字符进行运算  出栈
            {
                t=count(b[--btop],b[--btop],a[--atop]);
                b[btop++]=t;
                i++;
                //printf("%d\n",t);
            }
        }
        //printf("%d\n",b[1]);
        printf("%d\n",b[--btop]);//和上一句等价
    }
    return 0;
}

 

//栈的简单运用

转载于:https://www.cnblogs.com/xl1027515989/p/3245344.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/295116.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HDU 4267 A Simple Problem with Integers [树状数组]

根据%ka中a和k的不同组合建立55棵树状数组&#xff0c;每次修改操作只对其中1棵树状数组进行操作&#xff0c;每次查询对其中10棵树状数组统计增量和。 1 #include <string.h>2 #include <stdio.h>3 #define MAXN 500054 int n,q,x[MAXN];5 int ta,tb,cc,k,op;6 in…

字符串之旋转词

题目: 如果一个字符串str,把字符串str前面任意的部分挪到后面形成的字符串叫做str的旋转词。比如str="12345",str的旋转词有"12345"、"23451"、"34512"、"45123"、和"51234"。给定两个字符串a和b,请判断a和b…

Ecshop:后台添加新功能栏目以及管理权限设置

一、添加菜单项打开 /admin/includes/inc_menu.php文件(后台框架左边菜单)&#xff0c;在最后添加一行如下&#xff1a;1$modules[17_other_menu][sns_list] sns_list.php?actlist;ecshop默认一级菜单项有16项&#xff0c;所里这里的例子从17开始。当然这个key可以随便取的&a…

年轻人不讲武德有多可怕?

1 孩子&#xff0c;走你&#xff01;▼2 这都是什么阴间燃料&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼3 年轻人不讲武德&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼4 当你偷瞄喜欢的男生▼5 贝多芬&#xff1a;我入土这么都多年了&#xff08;…

使用C#体验函数式编程之——Partial application(局部应用)

函数式编程函数式编程是一种编程范式&#xff0c;着力于避免共享状态、可变数据和副作用产生&#xff0c;函数是第一等公民。这与面向对象编程相反&#xff0c;在面向对象编程中&#xff0c;应用程序状态通常与对象中的方法共享和共存。函数式编程是声明式的而不是命令式的&…

poj 1860 Currency Exchange (最短路bellman_ford思想找正权环 最长路)

感觉最短路好神奇呀&#xff0c;刚开始我都 没想到用最短路 题目&#xff1a;http://poj.org/problem?id1860 题意&#xff1a;有多种从a到b的汇率&#xff0c;在你汇钱的过程中还需要支付手续费&#xff0c;那么你所得的钱是 money&#xff08;nowmoney-手续费&#xff09;*r…

如何解决Maven依赖本地仓库eclipse报错的问题

一、应用场景 为了使用maven强大的包依赖管理和项目管理功能&#xff0c;故在项目中使用maven2作为项目建构工具。但是我的项目在内网构建&#xff0c;为了能使用maven2&#xff0c;只能使用本地仓库依赖策略。但是&#xff0c;有时候明明本地仓库确确实实存在相应的依赖包&…

windows socket 简单实例

Windows下Socket编程主要包括以下几部分&#xff1a;服务端 1、初始化Windows Socket库。 2、创建Socket。 3、绑定Socket。 4、监听。 5、Accept。 6、接收、发送数据。客户端 1、初始化Windows Socket库。 2、创建Socket。 3、连接Socket。 4、接收、发送…

如何将 image 转成 base64 字符串?

咨询区 vaj90我的项目中有一个需求&#xff0c;需要将 base64 格式的字符串 data:image/gif;base64,/9j/4AAQSkZJRgABAgEAYABgAAD.. 转成 image 格式&#xff0c;请问我该如何实现&#xff1f;回答区 Patashu&#xff1a;我写了一个 image 和 base64 相互转换的帮助类&#xff…

oracle执行命令显示2,Oracle数据库执行脚本常用命令小结

1. 执行一个SQL脚本文件复制代码 代码如下:sqlplus user/passservicename或复制代码 代码如下:SQL>start file_names或复制代码 代码如下:SQL> file_name我们可以将多条sql语句保存在一个文本文件中&#xff0c;这样当要执行这个文件中的所有的sql语句时&#xff0c;用上…

史上最强的烧脑合集!能全都搞懂的只有天才!

▲ 点击查看牛津大学&#xff0c;全球学生削尖脑袋想进的地方。它真正吸引人的&#xff0c;不仅是雄厚的师资、精湛的学术&#xff0c;更因为立校800余年来&#xff0c;始终有一套经典、独门的“高智商训练”方法&#xff01;25位首相、53位总统、11位国王、47位诺贝尔奖得主&a…

github上面如何编辑README

github上面如何编辑README 今天把自己做好的 《手机摇一摇震动刷新(支持ListView、GridView、Webview)》上传到github,之前代码都上传好了,就差介绍了 第一步:找到READM.md文件进入编辑状态 找到了READM.md文件,修改一番以后,我想试下水,先提交看看,如…

学习使用新浪接口随笔(一)

小生初入C#领域&#xff0c;因为学校部门里面在办新浪微博活动的时候&#xff0c;需要统计转发数量。&#xff08;个别团或者班级会去买转发数量&#xff0c;这没节操的&#xff09;&#xff0c;所以有的时候统计起来的时候&#xff0c;会比较麻烦。于是就产生了想利用新浪的AP…

安装office时,提示某项注册表无法写入,请查看是否有管理员权限

安装office时&#xff0c;提示某项注册表无法写入&#xff0c;请查看是否有管理员权限 大概就是这个意思&#xff0c;记不清楚了&#xff0c;解决办法&#xff1a; 首先如果你确认软件没有问题并且是用管理员帐户登录的话&#xff0c;请关闭防火墙与杀毒软件&#xff0c;重试&a…

开源Winform控件库:花木兰控件库

微信好友推荐&#xff0c;挺好看的Winfrom控件库&#xff0c;下面来看看。花木兰控件库Gitee截图介绍基于 C#&#xff08;语言&#xff09; 4.0 、 VS2019 、 Net Framework 4.0(不包括Net Framework 4.0 Client Profile) 开发的Winform控件库。为了兼容性采用了C#&#xf…

c语言题中的一些陷阱

1、求下列两个数组的长度关系characX[] "abcdefg";char acY[] { a, b,c, d, e, f, g };解析&#xff1a;对于字符串来说&#xff0c;字符串结尾默认为‘\0’&#xff0c;所以acX[]的长度为8&#xff0c;而第二个数组的大小长度为7&#xff0c;而且因为没有用‘\0’结…

“爱因斯坦兄弟”事件轰动纽约时报!双胞胎乱写博士论文,整容后越黑越红,竟然名利双收..........

全世界只有3.14 % 的人关注了爆炸吧知识只要够大就够震撼超模君前几天发了一篇文章《2020年最奇葩论文&#xff0c;打假网站看了都无语&#xff0c;原来外国人更擅长中医》&#xff0c;里面讲到的那篇奇葩论文&#xff0c;可真是让我见识到了什么叫做一本正经胡说八道&#xff…

oracle分区exchange,oracle 分区表exchange原理

oracle分区的exchange操作非常快&#xff0c;那原理是什么呢&#xff1f;下面我们来做个实验&#xff1a;SQL> create table test (id number(3));表已创建。SQL> insert into test values (1);已创建 1 行。SQL> commit;提交完成。SQL> select object_id,data_obj…

Android之手机摇一摇震动刷新(支持ListView、GridView、WebView)并生成我的二维码

手机摇一摇震动刷新 第一步:看摇一摇震动刷新的前后的效果图 1、摇一摇震动刷新前的效果图如下(图片太大了,分2次录屏的,如果看着不爽请猛戳我的github上面的演示) 2、摇一摇震动刷新之后的效果图如下 说明:我笔记本的虚拟机没有重力感应,所以用虚拟机摇一摇没反应…

搭建基于虚拟账号的电子邮件系统

使用postfix&#xff0c;cyrus-sasl&#xff0c;courier-authlib&#xff0c;mysql&#xff0c;dovecot&#xff0c;extmail&#xff0c;extman搭建电子邮件系统&#xff0c;可以使用web方式以虚拟账号注册登录邮箱&#xff0c;并且发送接受邮件&#xff0c;实现电子邮件功能。…