poj3295

include

include

include

using std::stack;

//K, A, N, C, E //逻辑符号
//p, q, r, s, t //bool值
char buf[101];
stack s_stack;
bool data[5] = { false };
bool WFF(char* str, int val)
{
//init p q r s t
for (int i = 0; i < 5; ++i) {
data[i] = (1 << i) & val;
}

while (!s_stack.empty()) s_stack.pop();
int strLen = strlen(str);
bool a, b;
while (--strLen >= 0)
{
    switch (buf[strLen])
    {
    case 'p':
        s_stack.push(data[0]);
        break;
    case 'q':
        s_stack.push(data[1]);
        break;
    case 'r':
        s_stack.push(data[2]);
        break;
    case 's':
        s_stack.push(data[3]);
        break;
    case 't':
        s_stack.push(data[4]);
        break;
    case 'K':
        a = s_stack.top(); s_stack.pop();
        b = s_stack.top(); s_stack.pop();
        s_stack.push(a && b);
        break;
    case 'A':
        a = s_stack.top(); s_stack.pop();
        b = s_stack.top(); s_stack.pop();
        s_stack.push(a || b);
        break;
    case 'N':
        a = s_stack.top(); s_stack.pop();
        s_stack.push(!a);
        break;
    case 'C':
        a = s_stack.top(); s_stack.pop();
        b = s_stack.top(); s_stack.pop();
        s_stack.push(!a || b);
        break;
    case 'E':
        a = s_stack.top(); s_stack.pop();
        b = s_stack.top(); s_stack.pop();
        s_stack.push(a == b);
        break;
    default:
        break;
    }
}
return s_stack.top();

}

int main()
{
while (true)
{
memset(buf, 0, sizeof(char) * 101);
scanf("%s", buf);
if (strcmp(buf, "0") == 0) break;

    bool tautology = true;
    for (int val = 0; val <= 0x1f; ++val)
    {
        if (!WFF(buf, val)) {
            tautology = false;
            break;
        }
    }

    if (tautology) {
        printf("tautology\n");
    }
    else {
        printf("not\n");
    }
}

return 0;

}

posted @ 2020-11-04 16:55  Quella'  阅读(44)  评论(0)    收藏  举报
Live2D