NYOJ 267郁闷的C小加(二)

TCMSP数据库+R语言实战:从网页爬虫到中药-靶点网络图的全流程解析 本文详细解析了如何使用R语言从TCMSP数据库抓取中药-靶点数据,并通过数据清洗、网络分析和可视化构建完整的中药作用机制研究流程。涵盖动态网页爬虫、ADME参数筛选、网络图构建及高级可视化技巧,为中医药现代化研究提供实用的生物信息学方法。 阅读详情

题目大意:将一个中缀表达式转为后缀表达式,并计算结果,这个中缀转后缀和表达式求值的结合!!


我的理解:先说一下,我对表达式的中缀、后缀的理解。中缀式符合人们的书写习惯,但是需要考虑运算符的优先级,括号也是有优先级的,

虽然它不参加运算,但是它改变了局部表达式的优先级!!!!!而后缀变大时,是不需要考虑优先级别的,它的书写顺序和计算

顺序是一致的,我们手算的顺序其实和后缀变大时的书写顺序是一样的!!!


思路:遍历表达式,遇到数字和小数点就直接输出(多次试验,发现后缀中数字的顺序和中缀式一样的),遇到运算符就利用栈来确定它们的顺序。

数字在输出的时候也要进到数据栈里,以便求出整个表达式的值!!!


数据结构:一个运算符栈,一个数据栈


上码:

import java.io.BufferedInputStream;
import java.util.Scanner;
import java.util.Stack;

public class 郁闷的新小加二 {
	public static void main(String[] args) {
		Scanner sc = new Scanner(new BufferedInputStream(System.in));
		int cases, len;
		String input, numStr;

		Stack<Double> num = new Stack<Double>();
		Stack<Character> op = new Stack<Character>();

		cases = sc.nextInt();
		while (cases-- > 0) {
			op.clear();
			num.clear();

			input = sc.next();
			len = input.length() - 1;// 去掉'='
			numStr = "";

			for (int i = 0; i < len; i++) {
				char c = input.charAt(i);
				if (Character.isDigit(c) || c == '.') {// 数字和.
					numStr += c;
					System.out.print(c);
				} else if (c == '(') {// '('
					op.push(c);
				} else if (isSymbol(c)) {// 运算符
					if (!numStr.equals("")) {//避免遇到前面是')',(此时numStr已经被清空了),当前c是运算符!!!
						num.push(Double.valueOf(numStr));
						numStr = "";
					}

					if (!op.isEmpty() && rank(op.peek()) >= rank(c)) {
						while (!op.isEmpty() && rank(op.peek()) >= rank(c)) {
							double num2 = num.pop();
							double num1 = num.pop();
							char op1 = op.pop();
							System.out.print(op1);
							num.push(cal(num1, num2, op1));
						}
					}
					op.push(c);
				} else {// ')'
					if (!numStr.equals("")) {//避免是'))',因为遇到第一个')'时,numStr就是空了!!
						num.push(Double.valueOf(numStr));
						numStr = "";
					}
					while (op.peek() != '(') {//一直运算,直到遇到'('
						double num2 = num.pop();
						double num1 = num.pop();
						char op1 = op.pop();
						System.out.print(op1);
						num.push(cal(num1, num2, op1));
					}
					op.pop();// 弹出'('
				}
			}
			if (!numStr.equals("")) {//避免表达式的最后就是数字!!!因为只有遇到'-+*/)'时,才会把数字压入栈
				num.push(Double.valueOf(numStr));
			}
			while (!op.isEmpty()) {//当只有一个运算符的时候!!!
				double num2 = num.pop();
				double num1 = num.pop();
				char op1 = op.pop();
				System.out.print(op1);
				num.push(cal(num1, num2, op1));
			}
			System.out.printf("=\n%.2f", num.pop());
			if (cases > 0) {
				System.out.println();
			}
		}

		sc.close();
	}

	static boolean isSymbol(char c) {
		return c == '+' || c == '-' || c == '*' || c == '/';
	}

	static int rank(char c) {
		if (c == '-' || c == '+') {
			return 1;
		}
		if (c == '*' || c == '/') {
			return 2;
		}
		return 0;//把'('也当成一个运算符!!!!
	}

	static double cal(double num1, double num2, char op) {
		switch (op) {
		case '-':
			num1 -= num2;
			break;
		case '+':
			num1 += num2;
			break;
		case '*':
			num1 *= num2;
			break;
		case '/':
			num1 /= num2;
			break;
		}
		return num1;
	}
}


【Arduino 动手做】构建一个迷你 Las Vegas RGB LED 球体 《Arduino迷你拉斯维加斯球体项目:15岁少年的创意挑战》 15岁的Ben通过本项目展示了如何利用Arduino平台制作一个经济实惠的迷你拉斯维加斯球体夜灯。该项目涉及LED选择(采用WS2812B可编程灯带)、电子元件配置(含Arduino Nano微控制器和红外遥控)以及3D建模设计(100毫米直径球体)。项目难点包括LED布局优化、供电方案设计和3D打印外壳制作。Ben详细记录了从背景研究、电路设计到最终实现的完整过程,特别强调了分辨率与成本的平衡,以及如何通过白色扩散器改善视觉效果。这个项目不仅 阅读详情

相关推荐

告别手动烧录!给STM32H750外挂Flash制作Keil专用下载算法(保姆级避坑指南)

本文详细介绍了为STM32H750外挂Flash开发Keil专用下载算法的全过程,从原理到实战操作,特别针对QSPI Flash的配置和优化提供了保姆级避坑指南。通过定制下载算法,开发者可以告别手动烧录,实现一键下载到外部Flash,大幅提升开发效率。

weixin_42567497的博客 251

NYOJ 267 郁闷的C小加(二)

描述 聪明的你帮助C小加解决了中缀表达式到后缀表达式的转换(详情请参考“郁闷的C小加(一)”),C小加很高兴。但C小加是个爱思考的人,他又想通过这种方法计算一个表达式的值。即先把表达式转换为后缀表达式,再求值。这时又要考虑操作数是小数和多位数的情况。 输入第一行输入一个整数T,共有T组测试数据(T 每组测试数据只有一行,是一个长度不超过1000的字符串,表示这个运算式,每个运算式都是以“=”

I_am_growing的专栏 676

SimpleFOC STM32实战:基于F103与HAL库,剖析速度环与电流环的协同控制

本文详细介绍了基于STM32F103与HAL库的SimpleFOC实战应用,重点剖析速度闭环控制与电流环的协同工作原理。通过开发环境搭建、参数调试技巧及性能优化方案,帮助开发者高效实现无刷电机精准控制,适用于机器人、无人机等高精度应用场景。

weixin_29170327的博客 477

C++调用数学函数

一、问题及代码 #include #include //调用数学公式 void main() { double num1,sum,num2; int op; cout<<"请输入num1,num2"<<endl; cin>>num1>>num2; cout<<"输1:对num1/num2取余"<<endl; cout<<"输2:对num1开

LQlqnifeng的博客 9931

Git Worktree + Claude Code:多终端并发开发完全实战

深入讲解如何使用 Git Worktree 配合多终端 Claude Code 实现并发开发,通过实战案例展示如何在 Android 开发中提升 2-3 倍效率,彻底告别等待 AI 的问题。

Cheson的专栏 1206

[ENVI]-[高光谱遥感]-波谱沙漏分析工具的使用

图1-2-1查看特殊波段的坏波段图1-2-2在中添加坏波段ENVI波谱沙漏分析工具MNF变换。

m0_57992372的博客 1470

nyoj267郁闷的c小加 中缀表达式转后缀求值

题目:郁闷的C小加(二)时间限制:1000 ms | 内存限制:65535 KB 难度:4描述 聪明的你帮助C小加解决了中缀表达式到后缀表达式的转换(详情请参考“郁闷的C小加(一)”),C小加很高兴。但C小加是个爱思考的人,他又想通过这种方法计算一个表达式的值。即先把表达式转换为后缀表达式,再求值。这时又要考虑操作数是小数和多位数的情况。输入第一行输入一个整数T,共有T组测试数据(T<10)。

Zhangcan233的博客 427

笔记——Oracle19c

Oracle阅读笔记

weixin_63819458的博客 1350

中缀式转后缀表达式 -NYOJ 题目267郁闷的C小加(二)

郁闷的C小加(二) 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 聪明的你帮助C小加解决了中缀表达式到后缀表达式的转换(详情请参考“郁闷的C小加(一)”),C小加很高兴。但C小加是个爱思考的人,他又想通过这种方法计算一个表达式的值。即先把表达式转换为后缀表达式,再求值。这时又要考虑操作数是小数和多位数的情况。 输入 第一行输入一个整数T,共有T组

Hanks软件库 1561

Matcap与菲涅尔

菲尼尔效果(简化版公式):fresnel = base + scale*((1-v*n)^power)透明队列为后前渲染,不关闭深度写入则会覆盖之前的像素,导致混合不了。y的值为0~1,根据x3返回对应y值。两色混合做个demo看看!混合为什么要关闭深度写入?

weixin_62773441的博客 372

华为 MetaERP 财务模块的核心业务对象,按子模块与架构维度分类,以表格呈现,适配架构设计与实施落地

华为MetaERP财务模块基于4A架构(业务/应用/数据/技术)与TOGAF框架,实现业财一体化与全球合规。业务架构涵盖组织模型与核心流程,应用架构支撑财务操作,数据架构确保数据一致性,技术架构提供高性能技术底座。模块覆盖总账、应收应付、资产等子模块,支持多组织、多币种、多准则核算,通过实时会计引擎实现"交易即核算"。4A架构与TOGAF框架对应,实现业务能力、应用组件、数据模型与技术栈的深度融合,为华为全球化财务核算提供核心支撑。

金牌架构师 440

nyoj 267 郁闷的C小加(二)【Java】

郁闷的C小加(二)【Java】描述样例输入样例输出思路代码 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 聪明的你帮助C小加解决了中缀表达式到后缀表达式的转换(详情请参考“郁闷的C小加(一)”),C小加很高兴。但C小加是个爱思考的人,他又想通过这种方法计算一个表达式的值。即先把表达式转换为后缀表达式,再求值。这时又要考虑操作数是小数和多位数的情况。 输入 第一行输入...

weixin_45585410的博客 161

基于STM32、HAL库的TCA9555PWR I/O扩展器驱动程序设计

define TCA9555_ADDR_BASE 0x20 // 基础地址 (A0=A1=A2=0)* @param direction: 方向 (0=输出, 1=输入)* @param direction: 方向 (0=输出, 1=输入)* @param polarity: 极性 (0=正常, 1=反转)* @param polarity: 极性 (0=正常, 1=反转)

corlin6688的博客 528

NYOJ 267 郁闷的C小加(二)

郁闷的C小加(二) 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 聪明的你帮助C小加解决了中缀表达式到后缀表达式的转换(详情请参考“郁闷的C小加(一)”),C小加很高兴。但C小加是个爱思考的人,他又想通过这种方法计算一个表达式的值。即先把表达式转换为后缀表达式,再求值。这时又要考虑操作数是小数和多位数的情况。 输入第一行输入一个整数T,共有T组测试数据

倚世独殇 672

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

NYOJ-267 郁闷的C小加(二)

  郁闷的C小加(二) 时间限制:1000 ms  |  内存限制:65535 KB 难度:4   描述 聪明的你帮助C小加解决了中缀表达式到后缀表达式的转换(详情请参考“郁闷的C小加(一)”),C小加很高兴。但C小加是个爱思考的人,他又想通过这种方法计算一个表达式的值。即先把表达式转换为后缀表达式,再求值。这时又要考虑操作数是小数和多位数的情况。   输入第一行输入一个整...

weixin_34174322的博客 129

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

NYOJ 35 表达式求值 or 267 郁闷的C小加(二)

描述 聪明的你帮助C小加解决了中缀表达式到后缀表达式的转换(详情请参考“郁闷的C小加(一)”),C小加很高兴。但C小加是个爱思考的人,他又想通过这种方法计算一个表达式的值。即先把表达式转换为后缀表达式,再求值。这时又要考虑操作数是小数和多位数的情况。 输入第一行输入一个整数T,共有T组测试数据(T 每组测试数据只有一行,是一个长度不超过1000的字符串,表示这个运算式,每个运算式都是以“=

Rookie的博客 501

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

NYOJ 267(郁闷的C小加(二)) 后缀表达式求值

悲剧了好几次,应该先判断栈是否为空,才能取栈顶元素,应该记住啊! 1 #include <iostream> 2 #include <stack> 3 #include<string> 4 #include<cstdlib> 5 #include<cstdio> 6 #include<algo...

weixin_30355437的博客 83

nyoj 267 郁闷的C小加(二)中缀表达式变后缀表达式并计算值

郁闷的C小加(二)时间限制:1000 ms  |  内存限制:65535 KB难度:4描述聪明的你帮助C小加解决了中缀表达式到后缀表达式的转换(详情请参考“郁闷的C小加(一)”),C小加很高兴。但C小加是个爱思考的人,他又想通过这种方法计算一个表达式的值。即先把表达式转换为后缀表达式,再求值。这时又要考虑操作数是小数和多位数的情况。输入第一行输入一个整数T,共有T组测试数据(T&lt;10)。每组...

Dear_Jia的博客 352

nyoj166 小珂的数学题

题目:点击打开链接 题目大意:给定一个字符串,该字符串是升序的,问它是字符串中的第几个? 思路:只要算出该字符串前面有多少个就可以了,然后加一就是最终答案,这里麻烦的是求该字符串前面有多少个,分为两部分,一部分是字符串长度小于该字符串的,另一部分是长度等于该字符串的但在该字符串前面的字符串!由于是字符串是升序的,即是n个字母只能组合成一个序列,那就应该对应着n个字母的组合数!  

ghw_study的专栏 1266

nyoj1170 最大的数

题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=1170 题目分析:刚看到这个题的时候,就想着怎么模拟添加*/+/(),可是想想没有这么麻烦,最大的数肯定是乘出来的嘛。。。当然了,还要处理一些要细节   1.数组的中第一个没有前驱,最后一个没有后继,要单独处理   2.当某个数为1时,应该加到旁边的数上,要往较小的一个加(a

ghw_study的专栏 1160

nyoj109 数列转换

题目:点击打开链接 理解:有的题目,一看就应该是模拟,而有的题目规律性很强,我们看这道题是从(an-1,an,an+1)转化到(an-1+an,-an,an-1+an),三个数的和是不变的。 那我们就想到是否数列额总和一样,两个数列就可以互达呢? 在我们下结论之前肯定要举几个例子,验证一下。 好现在考虑(1 2 3)(1 3 2) (1 2 3)→(3,-2,5)→(1 2 

ghw_study的专栏 854

nyoj 123士兵杀敌(四)

题目大意:1~M个士兵,初始的时候,每个人的军工都是零,动态连续增加军工,动态查询某个人的军工!!   思路:由于是动态的,连续插入,单个查询,是典型的插线问点树状数组!!! 对于树状数组的lowBit()和updat

ghw_study的专栏 803

nyoj 数论 541最强DE 战斗力

踏实做事,安心做人,这是最后的斗争,英特纳雄奈尔一定会实现。 题目分析:这题是一个数论题,第一开始我自己找规律的时候,发现任何一个正整数分解的字数都能转为2和3的乘积。。。 后来就baidu了一下,有这么一定数论定理! 定理:当把一个正整数n拆分加数因子的乘积时,尽可能的拆为3,若最后剩1,就拿回一个3凑成4,这样就是最大的乘积。 知道里定理,用java用的大数,就OK啦 代码:

ghw_study的专栏 776
上一篇: 慕课网 小慕机器人总结
下一篇: NYOJ 228 士兵杀敌(五)
_低头的麦穗
博客等级 码龄12年 4粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值