【CSP试题回顾】201903-2-二十四点

2024-03-13 01:52

本文主要是介绍【CSP试题回顾】201903-2-二十四点,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

CSP-201903-2-二十四点

关键点:中缀表达式转后缀表达式、后缀表达式计算

详见:【CSP考点回顾】后缀表达式计算/中缀表达式转后缀表达式

解题思路

  1. 将中缀表达式转换为后缀表达式

  2. 计算后缀表达式的值

  3. 主函数流程:首先读取一个整数n,表示有n个表达式需要判断。对于每个表达式,它首先将其转换为后缀形式,然后计算后缀表达式的值。如果结果等于24,就输出"Yes";否则,输出"No"。

完整代码

#include <iostream>
#include <stack>
#include <string>using namespace std;int getPriority(char c) { // 运算符的优先级if (c == 'x' || c == '/') return 2;return 1;
}// 中缀表达式转后缀表达式
string infixToPostfix(const string& infix) {string postfix;stack<char> opStack;for (char c : infix) {if (isdigit(c)) {postfix += c;}else{while (!opStack.empty() && getPriority(opStack.top()) >= getPriority(c)) {postfix += opStack.top();opStack.pop();}opStack.push(c);}}while (!opStack.empty()) { // 将栈内剩余的操作符添加到后缀表达式postfix += opStack.top();opStack.pop();}return postfix;
}int calculatePostfix(const string& postfix) { // 计算后缀表达式stack<int> valStack;for (char c : postfix) {if (isdigit(c)) {valStack.push(c - '0'); // 将字符转换为整数}else {int right = valStack.top(); valStack.pop();int left = valStack.top(); valStack.pop();switch (c) {case '+': valStack.push(left + right); break;case '-': valStack.push(left - right); break;case 'x': valStack.push(left * right); break;case '/': valStack.push(left / right); break;}}}return valStack.top();
}int n;
string expr, postfixExpr;int main() {cin >> n;for (int i = 0; i < n; i++){cin >> expr;postfixExpr = infixToPostfix(expr);if (calculatePostfix(postfixExpr) == 24) cout << "Yes\n";else cout << "No\n";}return 0;
}

请添加图片描述

这篇关于【CSP试题回顾】201903-2-二十四点的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/803285

相关文章

Golang的CSP模型简介(最新推荐)

《Golang的CSP模型简介(最新推荐)》Golang采用了CSP(CommunicatingSequentialProcesses,通信顺序进程)并发模型,通过goroutine和channe... 目录前言一、介绍1. 什么是 CSP 模型2. Goroutine3. Channel4. Channe

2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题

题库来源:安全生产模拟考试一点通公众号小程序 2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题是由安全生产模拟考试一点通提供,流动式起重机司机证模拟考试题库是根据流动式起重机司机最新版教材,流动式起重机司机大纲整理而成(含2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题参考答案和部分工种参考解析),掌握本资料和学校方法,考试容易。流动式起重机司机考试技

CSP 2023 提高级第一轮 CSP-S 2023初试题 完善程序第二题解析 未完

一、题目阅读 (最大值之和)给定整数序列 a0,⋯,an−1,求该序列所有非空连续子序列的最大值之和。上述参数满足 1≤n≤105 和 1≤ai≤108。 一个序列的非空连续子序列可以用两个下标 ll 和 rr(其中0≤l≤r<n0≤l≤r<n)表示,对应的序列为 al,al+1,⋯,ar​。两个非空连续子序列不同,当且仅当下标不同。 例如,当原序列为 [1,2,1,2] 时,要计算子序列 [

Java基础回顾系列-第七天-高级编程之IO

Java基础回顾系列-第七天-高级编程之IO 文件操作字节流与字符流OutputStream字节输出流FileOutputStream InputStream字节输入流FileInputStream Writer字符输出流FileWriter Reader字符输入流字节流与字符流的区别转换流InputStreamReaderOutputStreamWriter 文件复制 字符编码内存操作流(

Java基础回顾系列-第五天-高级编程之API类库

Java基础回顾系列-第五天-高级编程之API类库 Java基础类库StringBufferStringBuilderStringCharSequence接口AutoCloseable接口RuntimeSystemCleaner对象克隆 数字操作类Math数学计算类Random随机数生成类BigInteger/BigDecimal大数字操作类 日期操作类DateSimpleDateForma

Java基础回顾系列-第三天-Lambda表达式

Java基础回顾系列-第三天-Lambda表达式 Lambda表达式方法引用引用静态方法引用实例化对象的方法引用特定类型的方法引用构造方法 内建函数式接口Function基础接口DoubleToIntFunction 类型转换接口Consumer消费型函数式接口Supplier供给型函数式接口Predicate断言型函数式接口 Stream API 该篇博文需重点了解:内建函数式

Java基础回顾系列-第二天-面向对象编程

面向对象编程 Java类核心开发结构面向对象封装继承多态 抽象类abstract接口interface抽象类与接口的区别深入分析类与对象内存分析 继承extends重写(Override)与重载(Overload)重写(Override)重载(Overload)重写与重载之间的区别总结 this关键字static关键字static变量static方法static代码块 代码块String类特

Java基础回顾系列-第六天-Java集合

Java基础回顾系列-第六天-Java集合 集合概述数组的弊端集合框架的优点Java集合关系图集合框架体系图java.util.Collection接口 List集合java.util.List接口java.util.ArrayListjava.util.LinkedListjava.util.Vector Set集合java.util.Set接口java.util.HashSetjava

Java基础回顾系列-第九天-数据库编程

Java基础回顾系列-第九天-数据库编程 数据库简介工具包java.sql API 内容与数据库建立连接执行SQL语句数据库检索和更新查询结果SQL类型对应Java类型映射元数据异常 API方法DriverManagerConnectionStatementPreparedStatementCallableStatementResultSetjava.sql.Date批处理、存储过程、事务

Java基础回顾系列-第一天-基本语法

基本语法 Java基础回顾系列-第一天-基本语法基础常识人机交互方式常用的DOS命令什么是计算机语言(编程语言) Java语言简介Java程序运行机制Java虚拟机(Java Virtual Machine)垃圾收集机制(Garbage Collection) Java语言的特点面向对象健壮性跨平台性 编写第一个Java程序什么是JDK, JRE下载及安装 JDK配置环境变量 pathHe