【递归】【栈】先修课 计算概论(A)/函数递归练习(2)5:布尔表达式
- 总时间限制:
- 1000ms
- 内存限制:
- 65536kB
- 描述
-
输入一个布尔表达式,请你输出它的真假值。
比如:( V | V ) & F & ( F | V )
V表示true,F表示false,&表示与,|表示或,!表示非。
上式的结果是F - 输入
- 输入包含多行,每行一个布尔表达式,表达式中可以有空格,总长度不超过1000
- 输出
- 对每行输入,如果表达式为真,输出"V",否则出来"F"
- 样例输入
-
( V | V ) & F & ( F| V)
!V | V & V & !F & (F | V ) & (!F | F | !V & V)
(F&F|V|!V&!F&!(F|F&V)) - 样例输出
-
F
V
V 递归和栈的基础应用。
代码丑飞……
Code:#include<cstring>
#include<cstdio>
#include<iostream>
using namespace std;
string s;
int len;
bool work(int x)
{
char lastopt='&';
bool res=true;
bool sym=true;
for(int i=x;i<len;i++)
if(s[i]==')') return res;
else if(s[i]==' ') continue;
else if(s[i]=='!') sym=false;
else if(s[i]=='&') lastopt='&';
else if(s[i]=='|') lastopt='|';
else if(s[i]=='V')
{
bool tmp=true;
if(!sym) {tmp=false;sym=true;}
if(lastopt=='&') res&=tmp;
else res|=tmp;
}
else if(s[i]=='F')
{
bool tmp=false;
if(!sym) {tmp=true;sym=true;}
if(lastopt=='&') res&=tmp;
else res|=tmp;
}
else
{
bool tmp=work(i+);
if(!sym) {tmp^=true;sym=true;}
if(lastopt=='&') res&=tmp;
else res|=tmp;
int top=;
for(int j=i+;j<len;j++)
{
if(s[j]=='(') top++;
else if(s[j]==')') top--;
if(!top)
{
i=j;
break;
}
}
}
}
int main()
{
while()
{
s.clear();
getline(cin,s);
len=s.length();
if(!len) break;
char lastopt='&';
bool res=true;
bool sym=true;
for(int i=;i<len;i++)
if(s[i]==' ') continue;
else if(s[i]=='(')
{
bool tmp=work(i+);
if(!sym) {tmp^=true;sym=true;}
if(lastopt=='&') res&=tmp;
else res|=tmp;
int top=;
for(int j=i+;j<len;j++)
{
if(s[j]=='(') top++;
else if(s[j]==')') top--;
if(!top)
{
i=j;
break;
}
}
}
else if(s[i]=='!') sym=false;
else if(s[i]=='&') lastopt='&';
else if(s[i]=='|') lastopt='|';
else if(s[i]=='V')
{
bool tmp=true;
if(!sym) {tmp=false;sym=true;}
if(lastopt=='&') res&=tmp;
else res|=tmp;
}
else if(s[i]=='F')
{
bool tmp=false;
if(!sym) {tmp=true;sym=true;}
if(lastopt=='&') res&=tmp;
else res|=tmp;
}
putchar( res ? 'V' : 'F' );puts("");
}
return ;
}
【递归】【栈】先修课 计算概论(A)/函数递归练习(2)5:布尔表达式的更多相关文章
- 【递归】先修课 计算概论(A) / 函数递归练习(3)2:分解因数
#include<cstdio> using namespace std; bool is_prime(int x) { ;i*i<=x;i++) ) return false; r ...
- Openjudge计算概论——数组逆序重放【递归练习】
/*===================================== 数组逆序重放 总时间限制:1000ms 内存限制:65536kB 描述 将一个数组中的值按逆序重新存放. 例如,原来的顺 ...
- 计算概论(A)/基础编程练习1(8题)/3:晶晶赴约会
#include<stdio.h> int main() { int w; scanf("%d", &w); || w==) { printf("%s ...
- OpenJudge计算概论-取石子游戏
OpenJudge计算概论-取石子游戏[函数递归练习] /*====================================================================== ...
- OpenJudge计算概论-计算书费
/*============================================== 计算书费 总时间限制: 1000ms 内存限制: 65536kB 描述 下面是一个图书的单价表: 计算 ...
- python全栈开发-Day12 三元表达式、函数递归、匿名函数、内置函数
一. 三元表达式 一 .三元表达式 仅应用于: 1.条件成立返回,一个值 2.条件不成立返回 ,一个值 def max2(x,y): #普通函数定义 if x > y: return x els ...
- 计算概论(A)/基础编程练习(数据成分)/3:整数的个数
#include<stdio.h> int main() { ] = {}; // 输入k个正整数 scanf("%d",&k); // 循环读入和进行算术 w ...
- 计算概论(A)/基础编程练习(数据成分)/2:奥运奖牌计数
#include<stdio.h> int main() { // n天的决赛项目 int n; scanf("%d",&n); ] = {}; while ( ...
- 计算概论(A)/基础编程练习(数据成分)/1:短信计费
#include<stdio.h> int main() { // 输入当月发送短信的总次数n和每次短信的字数words int n,words; scanf("%d" ...
随机推荐
- HDU3488:Tour(KM算法)
Tour Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others)Total Submis ...
- grub ubuntu启动
set root=(hd0,gpt10) 现在变为 gpt9 了 安装固态后.变成了 (hd1,gpt11) set prefix=(hd0,gpt10)/boot/grub insmod norma ...
- hive连接数
使用hive分析日志作业很多的时候,需要修改mysql的默认连接数 修改方法 打开/etc/my.cnf文件 在[mysqld] 中添加 max_connections=1000 重启mysql ...
- php 上传csv文件
php fgetcsv()函数 定义和用法 fgetcsv() 函数从文件指针中读入一行并解析 CSV 字段. 与 fgets() 类似,不同的是 fgetcsv() 解析读入的行并找出 CSV 格式 ...
- 一个IT中专生在深圳的9年辛酸经历
一个IT中专生在深圳的9年辛酸经历 想一想来到深圳已经近10年了,感概万千呐!从一个身无分文的中专职校计算机毕业出来后,竟然大胆的南下(之前可是连我们那地区之外都没去过),现在有供完的房子,温柔的妻子 ...
- 金中欢乐赛 C题
题目传送门 这道题 hash就可以写了 弄了半天有点智障 强行压一压就okay了的说 #include<cstdio> #include<cstring> #include&l ...
- [bzoj3532][Sdoi2014]Lis——拆点最小割+字典序+退流
题目大意 给定序列A,序列中的每一项Ai有删除代价Bi和附加属性Ci.请删除若 干项,使得4的最长上升子序列长度减少至少1,且付出的代价之和最小,并输出方案. 如果有多种方案,请输出将删去项的附加属性 ...
- 关于vscode的个人配置
vs code官方下载地址 : https://code.visualstudio.com/Download 下载好的vs code相当是一款纯文本编辑器,接下来开始进行对其配置: 页面设 ...
- ie6浏览器兼容性
1.ie6双倍边距bug 块状元素设置float(左浮动或有浮动),并且设置margin值之后,第一个浮动的元素其左侧margin值为正常的2倍,如图,可以看到第一个元素的左侧边距于其他元素两两之间的 ...
- Django-urls路由分发
例如:127.0.0.0:8000/blog/lucaq.html,当有多个应用时,需要在blog应用下进行路由,我们在blog应用下做一个urls路由分发,就需要include模块实现. 导 ...