poj3295 Tautology , 计算表达式的值

来源:互联网 发布:js设置radio不可选 编辑:程序博客网 时间:2024/06/01 08:55

给你一个表达式,其包含一些0,1变量和一些逻辑运算法,让你判断其是否为永真式。


计算表达式的常用两种方法:1、递归; 2、利用栈。


code(递归实现)

#include <cstdio>#include <cstring>#include <algorithm>#include <cmath>#include <string>using namespace std;char str[2000];int pos;bool calc(int bit){    pos++;    switch(str[pos])    {        case 'p': return (bit)&1;        case 'q': return (bit>>1)&1;        case 'r': return (bit>>2)&1;        case 's': return (bit>>3)&1;        case 't': return (bit>>4)&1;        case 'K': return calc(bit) &calc(bit);        case 'A': return calc(bit) | calc(bit);        case 'N': return !calc(bit);        case 'C': return (!calc(bit)) | calc(bit);        case 'E': return calc(bit) == calc(bit);        default:;    }}int main(){    int bit;    bool mark;    while(~scanf("%s", str) && str[0]!='0')    {        mark = true;        for(bit=0; bit<32; ++bit)        {            pos = -1;            if( !calc(bit) )            {                mark = false;                break;            }        }        if(mark) printf("tautology");        else printf("not");    }    return 0;}


0 0