(栈的应用5.2.2)POJ 2106 Boolean Expressions(表达式求值)
/*
* POJ_2106.cpp
*
* Created on: 2013年10月30日
* Author: Administrator
*/ #include <iostream>
#include <cstdio> using namespace std; const int maxn = 110; int op[maxn], otop;
int val[maxn],vtop; void insert(int b){//将操作数b压入操作数栈val
while(otop && op[otop - 1] == 3){//在压入之前对b进行!运算
b = !b;
--otop;
} val[vtop++] = b;
} void calc(){//进行双目运算
int b = val[--vtop];
int a = val[--vtop];
int opr = op[--otop]; int c = (a&b);//默认进行&运算
if(opr == 1){//如果运算符为|
c = a|b;
} insert(c);
} int main(){
char c; int counter = 1;
while((c = getchar()) != EOF){//要理解并记住这种形式的输入输出处理
otop = 0;
vtop = 0; do{
if( c == '('){
op[otop++] = 0;
}else if(c == ')'){//处理)内的所有运算,结果压入val栈
while(otop && op[otop - 1] != 0){//只要没有遇到匹配的(,就继续进行运算
calc();
}
--otop;
insert(val[--vtop]);
}else if(c == '!'){
op[otop++] = 3;
}else if(c == '&'){
while(otop && op[otop - 1] >= 2){//将op栈中所有优先级比&的运算符出栈进行运算
calc();
} op[otop++] = 2;//将&压入op栈
}else if(c == '|'){
while(otop && op[otop - 1] >= 1){
calc();
} op[otop++] = 1;
}else if(c == 'V' || c == 'F'){
insert(c == 'V'?1:0);
}
}while((c = getchar()) != '\n' && c != EOF); while(otop){//将op栈中的所有元素出栈进行运算
calc();
} printf("Expression %d: ",counter++);
printf(val[0]?"V":"F");
printf("\n");
} return 0;
}
(栈的应用5.2.2)POJ 2106 Boolean Expressions(表达式求值)的更多相关文章
- POJ 2106 Boolean Expressions (布尔表达式求值)
题意:关于!,&,| 的运算,表达式中V代表true,F代表false. 思路:见代码吧,很详细了. 要注意 !!!F,!(...) 的情况. #include <iostream> ...
- POJ 2106 Boolean Expressions
总时间限制: 1000ms 内存限制: 65536kB 描述 The objective of the program you are going to produce is to evaluate ...
- [poj 2106] Boolean Expressions 递归
Description The objective of the program you are going to produce is to evaluate boolean expressions ...
- poj 2106 Boolean Expressions 课本代码
#include<cstdio> const int maxn=100 +10; int val[maxn],vtop; int op[maxn],otop; void insert(in ...
- 数据结构算法C语言实现(八)--- 3.2栈的应用举例:迷宫求解与表达式求值
一.简介 迷宫求解:类似图的DFS.具体的算法思路可以参考书上的50.51页,不过书上只说了粗略的算法,实现起来还是有很多细节需要注意.大多数只是给了个抽象的名字,甚至参数类型,返回值也没说的很清楚, ...
- 利用栈实现算术表达式求值(Java语言描述)
利用栈实现算术表达式求值(Java语言描述) 算术表达式求值是栈的典型应用,自己写栈,实现Java栈算术表达式求值,涉及栈,编译原理方面的知识.声明:部分代码参考自茫茫大海的专栏. 链栈的实现: pa ...
- 数据结构--栈的应用(表达式求值 nyoj 35)
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=35 题目: 表达式求值 时间限制:3000 ms | 内存限制:65535 KB描述 AC ...
- 【NYOJ-35】表达式求值——简单栈练习
表达式求值 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 Dr.Kong设计的机器人卡多掌握了加减法运算以后,最近又学会了一些简单的函数求值,比如,它知道函数min ...
- 表达式求值 (栈) 用C++实现
#include <cstdio> #include <cstdlib> #include <cmath> #include <stack> #incl ...
随机推荐
- OrderSessionHelper查看订单在session是否存在的辅助类
1. package com.biotool.web.controller.helper; import org.apache.commons.lang3.StringUtils; import ja ...
- Java 实现网站当前在线用户统计
1. import java.util.HashSet; import javax.servlet.ServletContext; import javax.servlet.http.HttpSess ...
- 访问路径:https://i.cnblogs.com/posts?categoryid=925678
https://i.cnblogs.com/posts?categoryid=925678
- ChatForFun 公众号使用说明
使用方法 2016-07-16 DennisMi ChatForFun 1,发送 #1 实现登陆,或者退出登陆 2,发送 #2 实现加入聊天,和退出聊天 3,聊天开始后,可以直接发送消息 4,如果 ...
- 安装nodejs+ionic+cordova环境心得
1.安装node-v0.10.38-x64.msi版本(从nodejs中下载最稳定版本,最后安装ionic安不上,然后又安装node-v0.10.38-x64.msi,再安装ionicok了.不知道是 ...
- iOS面试题及答案2015.6.7
iOS面试题及答案 1. Object-c的类可以多重继承么?可以实现多个接口么?Category是什么?重写一个类的方式用继承好还是分类好?为什么? 答: Object-c的类不可以多重继承 ...
- python center, ljust, rjust
例子 >>> s = "jihite" >>> s.center(, "*") '**jihite**' >>& ...
- Struts2上传图片时报404错误
可能是struts配置文件中定义的拦截器导致的,后缀拦截导致,将该拦截器去掉,在action类里判断后缀 public String upload()throws Exception{ ActionC ...
- windows下统计代码量
windows 工具 1.exe程序 http://blog.csdn.net/hui1502/article/details/51191678 https://sourceforge.net/pro ...
- Java基础之处理事件——选项按钮的鼠标监听器(Lottery 2 with mouse listener)
控制台程序. 定义监听器类有许多方式.下面把监听器类定义为单独的类MouseHandler: // Mouse event handler for a selection button import ...