表达式求值
2015-10-04 17:48
351 查看
表达式求值
时间限制: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
来源第四届河南省程序设计大赛
上传者
张云聪
之前写了这道。打算练练手,调了几个小时,醉了。重点是replace函数没记清。replace三个参数时,第二个参数表示长度,不是末位置。还有变换后字符串长度要更新…… 把遇到')'时,对应的'('标记位置为pos1,')'为pos2,找到',',find函数查找。把'('和','之间的字符串赋值为left,','和')'之间的字符串赋值为right,然后再判断s[pos1-1]的字符是'n','x',还是'd',把结果覆盖。从头再循环继续操作,直到表达式里没有'('为止...
#include<iostream> #include<stdio.h> #include<string.h> #include<string> #include<algorithm> using namespace std; int main() { int N,len,i,pos1,pos,pos2,j,k,right1,left1; string s; char sum[100],left[100],right[100]; cin>>N; while(N--) { cin>>s; len=s.size(); for(i=0;i<len;i++) { if(s.find("(")==-1) break; else if(s[i]=='(') pos1=i; else if(s[i]==')') { pos2=i; pos=s.find(',',pos1); k=0; for(j=pos1+1;j<pos;j++) { left[k]=s[j]; k++; } left[k]='\0'; k=0; for(j=pos+1;j<pos2;j++) { right[k++]=s[j]; } right[k]='\0'; sscanf(left,"%d",&left1); sscanf(right,"%d",&right1); if(s[pos1-1]=='d') { sprintf(sum,"%d",right1+left1); s.replace(pos1-3,pos2-pos1+4,sum); } else if(s[pos1-1]=='x') { if(right1>left1) { s.replace(pos1-3,pos2-pos1+4,right); } else { s.replace(pos1-3,pos2-pos1+4,left); } } else if(s[pos1-1]=='n') { if(right1>left1) { s.replace(pos1-3,pos2-pos1+4,left); } else { s.replace(pos1-3,pos2-pos1+4,right); } } i=-1; len=s.size();//勿忘。。哎,忘了写了 } } cout<<s<<endl; } return 0; }
相关文章推荐
- SQL Server解决分页问题(三种方法)
- 《测试驱动开发―31重构》
- SpringMVC 整合 hibernate 报错:No Session found for current thread
- 第三周-求集合并集
- 程序员面试智力题集锦
- 才发现,温度能左右我的心情。
- Android自定义权限(从一个Demo主界面跳转到另外一个Demo的主界面)、及四大组件的声明
- C++引用
- Java线程小结
- 排序
- centos7没有安装ifconfig命令的解决方法
- Android:Material Design详解
- Junit测试框架 Tips
- [java学习笔记]java语言基础概述之函数的定义和使用&函数传值问题
- (数据挖掘-入门-4)基于物品的协同过滤
- 读取ip比如“192.168.1.2”并且提取出里面各个字段的数字
- Java Evaluate Reverse Polish Notation(逆波兰式)
- 第四周—建立线性表
- gravity于Layout_gravity区别
- 什么是句柄?为什么会有句柄?HANDLE