Here is an expression that contains some 0, 1 variables and some logical operation methods, allowing you to determine whether it is a permanent expression.
Two common methods for calculating expressions: 1. recursion; 2. Using stacks.
Code (Recursive Implementation)
#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;}