nyoj 305 表达式求值【Java】

表达式求值【Java】


时间限制: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

代码

import java.util.Scanner;
import java.util.Stack;

public class Main {

	public static void main(String[] args) {
		Scanner cin = new Scanner(System.in);

		int number = cin.nextInt();
		cin.nextLine();
		while (number > 0) {
			String str = cin.nextLine();
			Stack<String> stack1 = new Stack<>();
			Stack<Integer> stack2 = new Stack<>();
			if (Character.isDigit(str.charAt(0))){
				System.out.println(str);
				number--;
				continue;
			}
			for (int i = 0; i < str.length(); i++) {
				if (str.charAt(i) == 'a') {
					String s = str.substring(i, i + 3);
					stack1.push(s);
					i += 3;
				} else if (str.charAt(i) == 'm') {
					String s = str.substring(i, i + 3);
					stack1.push(s);
					i += 3;
				} else if (48 <= str.charAt(i) && str.charAt(i) <= 57) {
					String s = "";
					while (48 <= str.charAt(i) && str.charAt(i) <= 57) {
						s += str.charAt(i);
						i++;
					}
					i--;
					int m = Integer.parseInt(s);
					stack2.push(m);
				} else if (str.charAt(i) == ')') {
					String pop = stack1.pop();
					int a = stack2.pop();
					int b = stack2.pop();
					if (pop.equals("add")) {
						stack2.push(add(a, b));
					} else if (pop.equals("min")) {
						stack2.push(Math.min(a, b));
					} else if (pop.equals("max")) {
						stack2.push(Math.max(a, b));
					}
				}
			}
			System.out.println(stack2.peek());
			number--;
		}

		cin.close();
	}

	public static int add(int a, int b) {
		return a + b;
	}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
x1y2 x2y3 x3y1-x1y3-x2y1-x3y2 是计算三角形面积的公式中的一部分。 在这个公式中,x1、x2、x3分别表示三角形的三个顶点的x坐标,y1、y2、y3分别表示三角形的三个顶点的y坐标。通过计算这个表达式的值,可以得到三角形的面积。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [TetraCluster:使用并行Java 2库的Java并行程序。 该程序在群集并行计算机上运行,​​以从给定的点集中找到...](https://download.csdn.net/download/weixin_42171208/18283141)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [线性代数有个题,求正交变换x=Qy,化二次型f(x1,x2,x3)=8x1x2+8x1x3+8x2x3为标准型求出特征值](https://blog.csdn.net/weixin_39956182/article/details/115882118)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [nyoj-67-三角形面积(S=(1/2)*(x1y2+x2y3+x3y1-x1y3-x2y1-x3y2))](https://blog.csdn.net/weixin_30492601/article/details/99541033)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值