POJ2106 Boolean Expressions / Openjudge Boolean Expressions (递归)全局题号1108

POJ 2106:Boolean Expressions 计算布尔表达式 - 堆栈 题意:bool表达式求值,V:true;F:false 题解:堆栈+优先级判定 给的输出样例比答案少一行== #include #include #include using namespace std; const int N = 110; int val[N], vtop, op[N], otop;//数值栈;运算符栈;栈顶指针 void ins(int b){ while(otop 阅读详情

#原题
1:Boolean Expressions
总时间限制: 1000ms 内存限制: 65536kB
描述
The objective of the program you are going to produce is to evaluate boolean expressions as the one shown next:
Expression: ( V | V ) & F & ( F | V )

where V is for True, and F is for False. The expressions may include the following operators: ! for not , & for and, | for or , the use of parenthesis for operations grouping is also allowed.

To perform the evaluation of an expression, it will be considered the priority of the operators, the not having the highest, and the or the lowest. The program must yield V or F , as the result for each expression in the input file.
输入
The expressions are of a variable length, although will never exceed 100 symbols. Symbols may be separated by any number of spaces or no spaces at all, therefore, the total length of an expression, as a number of characters, is unknown.

The number of expressions in the input file is variable and will never be greater than 20. Each expression is presented in a new line, as shown below.
输出
For each test expression, print "Expression " followed by its sequence number, ": ", and the resulting value of the corresponding test expression. Separate the output for consecutive test expressions with a new line.

Use the same format as that shown in the sample output shown below.
样例输入
( V | V ) & F & ( F| V)
!V | V & V & !F & (F | V ) & (!F | F | !V & V)
(F&F|V|!V&!F&!(F|F&V))
样例输出
Expression 1: F
Expression 2: V
Expression 3: V
来源
México and Central America 2004

##题目大意
V代表真,F代表非,&代表与,|代表或,!代表取反,输入多组数据,空格的数量不限,得出最后的结果。

##题目分析
采用递归的方法

很简单的一道题,如果知道了方法,就很容易解决。

我们先分析输入的样例。

我觉得大家至少也是大学生或者高中生(初中生,小学生的话那都是天才了)下面讲一下基本的数学知识。
表达式是由项和因子构成,项由因子构成。就这么简单。
而本题,表达式和项是一样的意思。因为没有像乘除加减这样优先次序。
从输入例子可以分析出 这一长串的字符可以分解成两部分 表达式和因子,或者说项和因子也行。
而项又是由一个个因子组成的。
所以逐层分解可以看出
其实就是因子与因子之间作逻辑运算。
最后的因子的结果在做逻辑运算。
最后得出整个表达式的结果

#include <iostream>
#include <cstring>
#include <string>
#include <cstdio>
using namespace std;
string s;
int expression_value(int result);//表达式求值
int factor_value(int result);//因子求值
int ptr = 0;//数组指针
int main()
{
    string ori;
    int ncase=0;
    while(getline(cin,ori))//删除空格
    {
    for(int i = 0;i<ori.size();i++)
        {
            char ch = ori[i];
            if(ori[i]!=' ')
                s=s+ch;
        }
        ptr = 0;//指针回到字符串头
        if(expression_value(0))
            cout<<"Expression "<<++ncase<<": V"<<endl;
        else
            cout<<"Expression "<<++ncase<<": F"<<endl;
        s.clear();ori.clear();//清空,以备下一组使用
    }
    return 0;
}
int expression_value(int result)
{
    result = factor_value(0);//表达式是由因子构成
    char ch = s[ptr];//查看字符
    while(ch == '&' || ch == '|')
    {
                ptr++;//指针往后移一位
        int tmp = factor_value(0);//读出一个因子的值
        if(ch == '&')
            result = result && tmp;//表达式与表达式做运算
        if(ch == '|')
            result = result || tmp;
        ch = s[ptr];//查看下一个字符
    }
    return result;
}
int factor_value(int result)
{
    char ch = s[ptr];
    while(ch =='(' || ch == '!' || ch == 'V' || ch == 'F' )
    {
        ptr++;
        if(ch == '(')
        {
            result = expression_value(0);// ()内相当于一个表达式
            ptr++;// 跳过 ")"
        }
        if(ch == '!')
        {
            result = ! factor_value(0);
        }
        if(ch == 'V')
        {
            return 1;
        }
        if(ch == 'F')
        {
            return 0;
        }
        ch = s[ptr];//查看下一个字符
    }
    return result;
}
POJ2014考研试题表达式·表达式树·表达式求值答案 立即下载

相关推荐

YOLOv11 改进策略:引入 NWD 损失函数提高小目标检测精度

YOLO(You Only Look Once)是一种实时目标检测算法,能够有效地预测图像中多个物体的边界框和类别概率。其高效性使它成为自动驾驶、视频监控等领域的理想选择。NWD 是一种基于 Wasserstein 距离的损失函数,其通过归一化处理,更好地评估预测框和真实框之间的几何偏差。这种方法不仅仅关注重叠区域,而且考虑中心点和尺度信息,提高了对小目标的敏感度。

走向CTO的路上... 2001

POJ 2106(布尔表达式的计算)

测试数据: input F &amp;!F | !V|!V &amp; !F&amp; !( F | F&amp; (V | !F| !V| V&amp; (V|F))) F&amp; !F|!V|!F&amp; (V|F| !V) &amp; !F&amp;!(F|F&amp; (V | !F|!V| V &amp;(V| F) )) F&amp;!F | !V| !...

兜率工的博客 2369

基于LTspice的共模电感差模/共模插入损耗仿真指南

在电源与EMC设计领域,插入损耗是衡量滤波器件抑制噪声能力的核心指标。共模电感作为EMI滤波器中最常见的元器件之一,其差模与共模插入损耗特性直接影响整体滤波方案的合规性。然而,仅依赖规格书曲线往往难以覆盖真实应用中的阻抗条件,借助SPICE仿真工具进行电路级验证已成为工程师常用的手段。LTspice凭借其轻量、高效的交流分析能力,能够帮助设计者快速搭建共模电感等效模型,并通过调整耦合系数、寄生电容等参数,还原漏感与谐振行为。本文以Wurth Elektronik的WE 744821201型号为例,从基本测试

weixin_27252001的博客 293

POJ 2106 / México and Central America 2004 Boolean Expressions (用栈处理表达式)

Boolean Expressions http://poj.org/problem?id=2106 Time Limit: 1000MS Memory Limit: 30000K Description The objective of the program you are going to produce is to evaluate boolean e

AC,∑ndless 2094

电磁兼容标准体系解析:从基础到认证的完整指南

本文系统解析了电磁兼容(EMC)标准体系,从基础概念到认证流程提供完整指南。文章阐述了EMC对于产品可靠性与市场准入的重要性,详细拆解了基础标准、通用标准、产品类标准及认证流程四层结构,并结合5G设备与工业控制等实战案例,为工程师提供了从设计初期到认证测试的高效应用策略。

weixin_29294975的博客 355

使用Python爬虫抓取公共交通网站的时刻表

Python爬虫是一种通过自动化方式从网页中抓取数据的程序。爬虫通过模拟用户请求,获取网站的HTML页面内容,并通过解析这些HTML内容,提取出我们需要的信息。requests:用于向网站发送HTTP请求并获取响应。:用于解析HTML文档,提取数据。Selenium:用于处理动态加载的网页,模拟浏览器操作。pandas:用于数据处理和分析,方便存储和操作抓取到的数据。本文介绍了如何使用Python爬虫抓取公共交通网站的时刻表,并提取其中的关键信息。我们使用了requestsSelenium和。

2201_76125261的博客 1119

POJ 2106 Boolean Expressions

Boolean Expressions Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 3051   Accepted: 934 Description The objective of the program you are going to produce is

kdwycz的刷题空间 1328

光伏硅片瑕疵检测边缘计算方案:Java+YOLOv11n+GraalVM Native Image+树莓派5部署,工业级高可靠落地

本文提出了一种基于边缘计算的光伏硅片瑕疵检测方案,针对传统人工检测和云端AI方案的不足,采用Java+YOLOv11n+树莓派5的技术路线,实现了低延迟、高可靠的工业级检测。方案核心特点包括: 分层解耦的边缘架构,将感知、推理全链路下沉到树莓派5,端到端延迟<100ms; 创新性技术选型组合:Java 17+ONNX Runtime+GraalVM Native Image,内存占用<200MB; 安防级可靠性设计,支持断网缓存、看门狗守护、异常自动恢复等工业场景需求; 完全基于开源技术栈,硬件

2601_94871597的博客 474

POJ 2106 Boolean Expressions(递归算法)

1:Boolean Expressions 总时间限制: 1000ms 内存限制: 65536kB 描述The objective of the program you are going to produce is to evaluate boolean expressions as the one shown next:  Expression: ( V |

lovemylife1234的博客 4789

AI驱动的网络安全运维:智能化时代的安全保障

本项目旨在使用Python和AI技术构建一个智能化的网络安全运维系统,能够实时监测网络流量,检测潜在的安全威胁,并自动采取应对措施,从而提升网络安全管理的效率和准确性。具体内容包括:环境配置与依赖安装数据采集与预处理机器学习模型构建与训练实时威胁检测与响应实际应用案例通过本文的介绍,我们展示了如何使用Python和AI技术构建一个智能化的网络安全运维系统。

Echo_Wish 1290

【Py/Java/C++/C/JS/Go六种语言OD独家2024E卷真题】20天拿下华为OD笔试之【固定滑窗】2024E-考勤信息【欧弟算法】全网注释最详细分类最全的华为OD真题题解

可上练习华子OD、大厂真题绿色聊天软件戳oj1441了解算法冲刺训练(备注【优快云】否则不通过)

weixin_48157259的博客 619

递归-openjudge-1108:Boolean Expressions

Boolean Expressions 总时间限制: 1000ms 内存限制: 65536kB 描述The objective of the program you are going to produce is to evaluate boolean expressions as the one shown next:  Expression: ( V | V ) & F

咖啡的博客 510

深入剖析RK3588系统休眠唤醒机制及驱动适配秘籍

本文深入探讨了RK3588嵌入式系统的休眠唤醒机制及驱动适配技术。首先分析了系统支持的两种休眠模式(Freeze浅度睡眠和Mem深度睡眠)及四种唤醒方式(GPIO中断、蓝牙事件、外设活动和定时器唤醒)的工作原理。重点介绍了驱动适配的三个关键环节:设备树配置要点、驱动代码实现与优化方法,以及驱动与内核电源管理的协同机制。通过GPIO按键唤醒和蓝牙唤醒两个实际案例,展示了具体实现过程并提供了常见问题的解决方案。文章为开发者提供了全面的技术参考,有助于优化系统功耗管理和响应性能,对嵌入式系统开发具有重要指导意义。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 433

openjudge2106 Boolean Expressions

DescriptionThe objective of the program you are going to produce is to evaluate boolean expressions as the one shown next: Expression: ( V | V ) &amp; F &amp; ( F | V )where V is for True, and F is fo...

残梦听雨 1901

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

POJ 2106 Boolean Expressions 笔记

计算布尔表达式结果,V为真,F为假,三个操作符 ! , & , | 优先级相同。 

woniupengpeng的专栏 646

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

POJ 2106 Boolean Expressions (栈,位运算)

跟四则混合运算一个算法 建两个栈,一个保存操作符,一个保存操作数 根据操作符的优先级给操作符编号,最低优先级的数字最大(也可以反过来,随便玩),然后当操作符入栈的时候,如果栈顶数字比他大,则执行栈顶操作符直到栈为空或栈顶小于等于入栈操作符。 最后别忘了完结的时候执行完栈内操作符。 #include void execute(char mode,char *stack,int *po

xtq的专栏 2247

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

递归之 Boolean Expressions

关于题目描述The objective of the program you are going to produce is to evaluate boolean expressions as the one shown next: Expression: ( V | V ) & F & ( F | V )where V is for True, and F is for False. The

qiaoyifan的博客 1948

第三周测验 简单的整数划分问题和Boolean Expressions

006:简单的整数划分问题 描述 将正整数n 表示成一系列正整数之和,n=n1+n2+…+nk, 其中n1&gt;=n2&gt;=…&gt;=nk&gt;=1 ,k&gt;=1 。 正整数n 的这种表示称为正整数n 的划分。正整数n 的不同的划分个数称为正整数n 的划分数。 输入 标准的输入包含若干组测试数据。每组测试数据是一个整数N(0 &lt; N &lt;= 50)。 输出 对于...

yanyanwenmeng的博客 943

POJ 2106(转载POJ discuss)

/* 先把所有可简化的字符串写出来 比如!!简化为没有 (V)简化成V 然后每读一个非空格字符 都扫描一次其后缀是否是可化简的字符串 是就化简 读到EOF或者\n就输出整个字符串就好 显然合法的输入一定可以化简成F或V 有个坑点是最后一个输入似乎结尾是EOF不是\n */ /* 采用的是枚举法;先枚举所有的可能性,再来一一匹配,并简化;最后只有一个值; */ #include&lt;stdi...

julicliy的博客 404

poj 2106

原题链接:http://poj.org/problem?id=2106 题意:或、与、 非的多元表达式的求值; 思路:中缀表达式变为后缀表达式; 代码: 1 #include<cstdio> 2 #include<iostream> 3 #include<stack> 4 #include<string> ...

dfsy999999的博客 468

POJ 2106(一个一个死算出来的)

/* 就是每当遇到一个数据,就进行判断这个数据的前面一个操作符号是什么,可不可运算; 就这样运行下去,直到只剩下一个数据了; */ #include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;cstring&gt; #include &lt;stack&gt; using namespace std; stack&lt;c...

julicliy的博客 473

模板驱动型文档自动化:结构化填充与一键交付实践指南

文档自动化本质上是将重复性文档生产从‘人工排版+校验’升级为基于结构化数据的确定性输出。其核心原理在于通过可编程模板定义数据层约束、逻辑层分支与呈现层样式,实现内容与格式的解耦。技术价值体现在错误率趋近于零、人力成本下降85%以上,并支撑合规、销售、咨询等高频标准化场景。本文聚焦Sqribble平台,深入解析模板驱动如何落地为工程化能力——涵盖三层模板设计、多源数据注入(CSV/表单/API)、智能分发及安全加固,尤其强调‘结构化填充’与‘一键交付’两大关键实践路径。

weixin_30653023的博客 490

poj 2106 Boolean Expressions(特殊的表达式求值)

poj 2106 Boolean Expressions(特殊的表达式求值)

PKU_ZZY的博客 2589

POJ 2106

知识点:栈的应用语法经验,主函数外的函数中的指针变量不能付给主函数中的指针,因为函数调用完后就会释放内存,赋值相当于没赋#include<iostream> using namespace std; const int maxn=110; void trans(char *exp,char *atexp); int oc( char *s); int main() { ...

weixin_34311757的博客 203

poj2106——Boolean Expressions

<br />题意:求表达式运算<br />思路:同数字表达式运算一样,先转后缀,再求值。<br />注意点:1,'('在进栈时,优先级最高,出栈时相反;<br />            2,对于'!',单目表达式的计算,在转后缀的时候,需将数值进栈,再将其压入后缀表达式中;<br />#include<cstdio> #include<cstring> #include<iostream> using namespace std; const int len =120; char infi

r_ax的专栏 1067

POJ 2106 Boolean Expressions(模拟+LL1)

Description 判断公式的F或V Input 多组用例,每组用例为以字符串表示公式,以文件尾结束输入 Output 对于每组用例,输出公式的结果F or V Sample Input ( V | V ) & F & ( F| V) !V | V & V & !F & (F | V ) & (!F | F | !V & V) (F&F|V|!V&!F&!(F|F&V))

ZSQ 1160
上一篇: ZOJ1003 Crashing Balloon
下一篇: OpenJudge简单的整数划分问题两种方法(DFS)(动态规划0ms),全局题号7215,已AC
Link_Ray
博客等级 码龄9年 44粉丝 156原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值