表达式求值

时间限制: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
 /**
分析:这个题,用递归(栈)的思想来解决 步骤:
①、遇到 add (A, B) return A + B;
②、遇到 max (A, B) return max (A, B);
③、遇到 min (A, B) return min (A, B); 通过例子 min (add (1, 4), 4) 说明算法执行流程:
①、将min (add (1, 4), 4) 视为 min (A, B) return min (A, B);
②、A = add (1, 4) return 1 + 4; (此时:A = 5)
③、return min (5, 4) (所以:就得到了答案 ==> 4) 关键代码:
solve () {
switch (s [pos]) {
case 'm':
pos += 4;
if (s [pos - 2] == 'n')
return min (solve (), solve ());
else
return max (solve (), solve ());
case 'a':
return solve () + solve ();
case ',':
case ')':
pos ++;
return solve ();
default:
sscanf (s + pos, "%d%n", &v, &n);
pos += n;
return v;
}
}
**/

C/C++代码实现:

 #include <bits/stdc++.h>

 using namespace std;

 char s[];

 int pos, n, v;

 int solve () {
switch (s [pos]) {
case 'm':
pos += ;
if (s [pos - ] == 'n') // min (A, B)
return min (solve (), solve ());
else // max (A, B)
return max (solve (), solve ());
case 'a': // add (A, B)
pos += ;
return solve () + solve ();
case ',':
case ')':
pos += ;
return solve ();
default:
sscanf (s + pos, "%d%n", &v, &n);
// sscanf ()在这个的作用:对字符串s从pos开始取出第一个整数放在v中,并用n来记录整数的位数
pos += n;
return v;
}
} int main () {
int T;
scanf ("%d", &T);
while (T --) {
pos = ;
scanf ("%s", &s[]);
printf ("%d\n", solve());
}
return ;
}

nyoj 305 表达式求值 (递归)的更多相关文章

  1. NYOJ 305 表达式求值 (字符串处理)

    题目链接 描述 Dr.Kong设计的机器人卡多掌握了加减法运算以后,最近又学会了一些简单的函数求值,比如,它知道函数min(20,23)的值是20 ,add(10,98) 的值是108等等.经过训练, ...

  2. NYOJ 35 表达式求值(逆波兰式求值)

    http://acm.nyist.net/JudgeOnline/problemset.php?typeid=4 NYOJ 35 表达式求值(逆波兰式求值) 逆波兰式式也称后缀表达式. 一般的表达式求 ...

  3. NYOJ 1272 表达式求值 第九届省赛 (字符串处理)

    title: 表达式求值 第九届省赛 nyoj 1272 tags: [栈,数据结构] 题目链接 描述 假设表达式定义为: 1. 一个十进制的正整数 X 是一个表达式. 2. 如果 X 和 Y 是 表 ...

  4. NYOJ 35 表达式求值 (字符串处理)

    题目链接 描述 ACM队的mdd想做一个计算器,但是,他要做的不仅仅是一计算一个A+B的计算器,他想实现随便输入一个表达式都能求出它的值的计算器,现在请你帮助他来实现这个计算器吧. 比如输入:&quo ...

  5. nyoj(表达式求值)

    描述 ACM队的mdd想做一个计算器,但是,他要做的不仅仅是一计算一个A+B的计算器,他想实现随便输入一个表达式都能求出它的值的计算器,现在请你帮助他来实现这个计算器吧. 比如输入:"1+2 ...

  6. NYOJ 35 表达式求值

    一个模板了 哈哈. 这题由于已经包括了整形.浮点形了,以后也不须要特别处理了. /* 这里主要是逆波兰式的实现,使用两个stack 这里用字符串来模拟一个stack,第一步,将中缀表达式转变为后缀表达 ...

  7. NYOJ - 35 表达式求值 分类: NYOJ 2015-03-18 10:33 31人阅读 评论(0) 收藏

    #include<iostream> #include<string> #include<stack> #include<cstdio> using n ...

  8. 数据结构--栈的应用(表达式求值 nyoj 35)

    题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=35 题目: 表达式求值 时间限制:3000 ms | 内存限制:65535 KB描述 AC ...

  9. 【算法】E.W.Dijkstra算术表达式求值

    算术表达式求值 我们要学习的一个栈的用例同时也是展示泛型的应用的一个经典例子,就是用来计算算术表达式的值,例如 ( 1 + ( ( 2 + 3 ) * ( 4 * 5 ) ) ) 如果将4乘以5,把3 ...

随机推荐

  1. STL的vector略解

    本文部分内容参考于这儿. vector 的基础知识,上文已经阐述地很详尽了.笔者谨给出 vector 的声明及其常用函数. 代码抬头需包含 #include<vector> using n ...

  2. python-函数相关

    一.函数: 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率.你已经知道Python提供了许多内建函数,比如print(). 但你也可以自 ...

  3. go-异常处理-error-panic-recover

    Go语言的函数可以一次返回多个结果.这就为我们温和地报告错误提供了语言级别的支持. func readFile(path string) ([]byte, error) { file, err := ...

  4. Halcon C# 联合编程问题(三)

    因为之前遇到的那个halcon处理的图片要转换成ImageSource的问题,迟迟没有找到好的解决方案, 于是决定直接在wpf中使用halcon提供的HWindowControlWPF,用于显示图片. ...

  5. Bootstrap Studio Mac网页设计神器

    Bootstrap Studio Mac网页设计神器 美丽的组件 Bootstrap Studio附带了大量漂亮的组件,用于构建响应式页面.我们有页眉,页脚,画廊,幻灯片甚至基本元素,如跨度和div. ...

  6. python编程系列---tcp客户端的简单实现

    实现流程如下: """ TCP客户端实现流程1. 创建一个tcp 客户端对象2. 与服务端建立连接3. 通过tcp socket 收发数据4. 关闭连接 关闭tcp &q ...

  7. liunux中的标准输出。以及常用的 2>dev/null 命令的含义

    了解Linux怎样处理输入和输出是非常重要的.一旦我们了解其原理以后,我们就可以正确熟练地使用脚本把内容输出到正确的位置.同样我们也可以更好地理解输入重定向和输出重定向. 首先我们来了解一下linux ...

  8. Java Web 学习(1) —— Servlet

    Java Web 学习(1) —— Servlet 一. 什么是 Servlet Java Servlet 技术是Java体系中用于开发 Web 应用的底层技术. Servlet 是运行在 Servl ...

  9. php下载文件,线上文件下载

    1.多个文件下载 <?php /* 把知道的图片问题名字做成一个数组 */ $mp4 = ['123','456']; /* count($mp4) 类似于 js 的 $mp4.length * ...

  10. 在WPF中使用.NET Core 3.0依赖项注入和服务提供程序

    前言 我们都知道.NET Core提供了对依赖项注入的内置支持.我们通常在ASP.NET Core中使用它(从Startup.cs文件中的ConfigureServices方法开始),但是该功能不限于 ...