首页 > 其他分享 >3044: 【数据结构】【栈】true or false

3044: 【数据结构】【栈】true or false

时间:2024-03-17 09:32:25浏览次数:26  
标签:false int stack bool str true 3044

题目描述

帮助小明解决逻辑运算

输入

一个字符串(串长小于255)表达逻辑式子,内只包含true,false,or,and,not和空格,(不包含括号和xor),优先级同pascal.(not->and->or),同级左边先算,如果逻辑式有误则输出 error。

输出

运算结果:true 或者 false ,如果无法得到结果的输出error

样例输入

true or false and false

样例输出

true

Code:

#include<bits/stdc++.h>
using namespace std;
stack<int>stack_int;
stack<bool>stack_bool;
void pop1(bool bool1,bool bool2){
    if(stack_bool.size()<2){
        cout<<"error";
        exit(0);
    }
    bool1=stack_bool.top();
    stack_bool.pop();
    bool2=stack_bool.top();
    stack_bool.pop();
    stack_bool.push(bool1||bool2);
}
void pop2(bool bool1,bool bool2){
    if(stack_bool.size()<2){
        cout<<"error";
        exit(0);
    }
    bool1=stack_bool.top();
    stack_bool.pop();
    bool2=stack_bool.top();
    stack_bool.pop();
    stack_bool.push(bool1&&bool2);
}
void pop3(bool bool1){
    if(stack_bool.empty()){
        cout<<"error";
        exit(0);
    }
    bool1=stack_bool.top();
    stack_bool.pop();
    stack_bool.push(!bool1);
}
void pop(){
    bool bool1,bool2;
    if(stack_int.top()==3){
        pop3(bool1);
    }else if(stack_int.top()==2){
        pop2(bool1,bool2);
    }else if(stack_int.top()==1){
        pop1(bool1,bool2);
    }
    stack_int.pop();
}
int main(){
    string str;
    while(cin>>str){
        if(str=="or"){
            while(!stack_int.empty()){
                pop();
            }
            stack_int.push(1);
        }else if(str=="and"){
            while(!stack_int.empty()&&stack_int.top()>=2){
                pop();
            }
            stack_int.push(2);
        }else if(str=="not"){
            stack_int.push(3);
        }else if(str=="true"){
            stack_bool.push(true);
        }else if(str=="false"){
            stack_bool.push(false);
        }
    }
    while(!stack_int.empty()){
        pop();
    }
    if(stack_bool.size()==1){
        if(stack_bool.top()==true){
            cout<<"true";
        }else{
            cout<<"false";
        }
    }else{
        cout<<"error";
    }
    return 0;
}
/**************************************************************
    Problem: 3044
    User: yangrenrui
    Language: C++
    Result: 正确
    Time:16 ms
    Memory:2196 kb
****************************************************************/

标签:false,int,stack,bool,str,true,3044
From: https://blog.csdn.net/yangrenrui/article/details/136660764

相关文章

  • Maven 中<optional>true</optional>和<scope>provided</scope>之间的区别(转)
    原文:https://segmentfault.com/a/1190000019266080?utm_source=tag-newest<optional>true</optional>和<scope>provided</scope>有什么区别呢?从语义来上理解optional可选的,可以理解为此功能/此依赖可选,如果不需要某项功能,可以不引用这个包。scopeprovided提供的,可以理解为此......
  • Assetbundle.Unload(true)卸载资源时没调用ScriptableObject的OnDisable
    1)Assetbundle.Unload(true)卸载资源时没调用ScriptableObject的OnDisable2)UnityVolumeManager中ReplaceData如何优化3)关于使用Addressable的资源放在远程服务器后的下载问题4)Prefab对DLL中脚本的引用丢失这是第377篇UWA技术知识分享的推送,精选了UWA社区的热门话题,涵盖了UWA问答......
  • TrueType 和 OpenType 的关系
    OpenType和TrueType都是字体文件格式,它们用于在数字设备中存储和渲染文本。虽然这两种格式都广泛使用,但它们在设计和功能上有一些重要区别。TrueType是由苹果公司和微软公司在1980年代末推出的一种标准字体格式。它的主要特点包括:二次贝塞尔曲线:TrueType字体使用二次贝......
  • div contenteditable="true" 添加placehoder效果
    <divclass="contain":style="{height:editableHeight+'px'}" v-html="innerText" ref="editableDiv" contenteditable="true" :placeholder=placeholder @input="inputTe......
  • 光标自动定位到起始位置contenteditable="true" ,v-html绑定内容,div可编辑时,光标移到最
    出现这个问题原因:(1)通过打断点可以看到,当你输入的时候触发input事件,提交值给父组件中的v-model;(2)但因为在子组件中又监听了v-model的值,所以整体形成了闭环;(3)还需要重点说明的是光标问题,contenteditable与v-html所在的元素值的改变如果不是通过输入而是通过赋值实现,光标就会跑到最......
  • Go 100 mistakes - #92: Writing concurrent code that leads to false sharing
      ......
  • img标签 为何每个都要设置 draggable = false?
    dragable:默认值为false,可以用于拖拽,但是一个虚拟的。a标签,img标签默认自带拖拽,(只有chrome,safari可以使用,firefox不支持,ie不支持)在HTML5中,img标签默认是可拖动的(至少在某些浏览器如Chrome和Safari中)。当用户尝试拖动图片时,浏览器会根据其默认行为进行处理,例如可能会启动一......
  • VMware vsphere 8 虚拟机安装Truenas core 13运行内存占满报警
    使用过Truenas的朋友都知道,在共享运行了一段时间之后,由于Truenas的内存缓存机制,导致系统显示Truenas虚拟机内存已用满,然后报警。首先可以确定,在Truenas系统中,系统内存缓存满并没有任何问题,但是在VMware的管理中并不了解Truenas的运行机制,这里的报警是一定要解决的,现在思路有两条......
  • TrueNas系统安装步骤
    安装前准备:下载镜像TrueNASSCALEDirectDownloads将制作好的启动盘插入服务器中,接上网线进入主板的设置将U盘设为第一启动安装:1、进入TrueNAS的安装界面2、选择两块硬盘作为启动盘(也可以一块)上下键移动,空格键选择3、全新安装4格式化启动环境5、安装,是6、创建ad......
  • TrueNas系统硬盘扩容步骤
    扩容前准备将新的硬盘放到服务器里(红框中是将要新增硬盘的卡槽)安装之后添加新磁盘扩容步骤1、将新磁盘添加到池2、选择现有池3、数据--布局仍然使用RAIDZ3,12块,一个VDEVs(注意这里是一个新的VDEVs)4、缓存(仍然使用固态两块)5、Review注意事项在TrueNAS系统中添加新......