Poj3295  Tautology

Tautology
Time Limit: 1000MS Memory Limit: 65536K
Total Submissions: 10425 Accepted: 3956

Description

WFF 'N PROOF is a logic game played with dice. Each die has six faces representing some subset of the possible symbols K, A, N, C, E, p, q, r, s, t. A Well-formed formula (WFF) is any string of these symbols obeying the following rules:

  • p, q, r, s, and t are WFFs
  • if w is a WFF, Nw is a WFF
  • if w and x are WFFs, Kwx, Awx, Cwx, and Ewx are WFFs.
The meaning of a WFF is defined as follows:
  • p, q, r, s, and t are logical variables that may take on the value 0 (false) or 1 (true).
  • K, A, N, C, E mean and, or, not, implies, and equals as defined in the truth table below.
Definitions of K, A, N, C, and E
     w  x  Kwx  Awx   Nw  Cwx  Ewx
  1  1  1  1   0  1  1
  1  0  0  1   0  0  0
  0  1  0  1   1  1  0
  0  0  0  0   1  1  1

tautology is a WFF that has value 1 (true) regardless of the values of its variables. For example, ApNp is a tautology because it is true regardless of the value of p. On the other hand, ApNq is not, because it has the value 0 for p=0, q=1.

You must determine whether or not a WFF is a tautology.

Input

Input consists of several test cases. Each test case is a single line containing a WFF with no more than 100 symbols. A line containing 0 follows the last case.

Output

For each test case, output a line containing tautology or not as appropriate.

Sample Input

ApNp
ApNq
0

Sample Output

tautology

not

此题虽然做法是用构造法但是,还是用栈求表达式的方法。题目大意就是求出表达式若最后的表达式值为1输出

tautology,else有一个为假输出not,即看是否为永真式。

#include <iostream>
#include<cstdio>
#include<cstring>
char st[1000];
int q,p,s,r,t,c[1000];
using namespace std;
void D()
{
    int z=0,x,y;
    int l=strlen(st);
    for(int i=l-1;i>=0;i--)//要倒着进行操作因为栈的处理最后进入的线处理
    {
        if(st[i]=='p')//p,q,r,s,t的取值只有0,1
            c[z++]=p;
        else if(st[i]=='q')
            c[z++]=q;
        else if(st[i]=='r')
            c[z++]=r;
        else if(st[i]=='s')
            c[z++]=s;
        else if(st[i]=='t')
            c[z++]=t;
        else if(st[i]=='K')
            {
                x=c[--z];
                y=c[--z];
                c[z++]=(x&&y);
            }
        else if(st[i]=='A')
            {
                x=c[--z];
                y=c[--z];
                c[z++]=(x||y);
            }
        else if(st[i]=='N')
            {
                x=c[--z];
                c[z++]=(!x);
            }
        else if(st[i]=='C')
            {
                x=c[--z];
                y=c[--z];
                if(x==1&&y==0)
                    c[z++]=0;
                else
                    c[z++]=1;
            }
        else if(st[i]=='E')
            {
                x=c[--z];
                y=c[--z];
                if( (x==0&&y==0)||(x==1&&y==1) )
                    c[z++]=1;
                else
                    c[z++]=0;
            }
    }
}
int solve()
{
    for(p=0;p<2;p++)
        for(q=0;q<2;q++)
            for(r=0;r<2;r++)
                for(s=0;s<2;s++)
                    for(t=0;t<2;t++)
                    {
                            D();
                            if(c[0]==0)//有一个假就输出not
                                return 0;
                    }
     return 1;
}
int main()
{
    int n,m,i,j,k;
    while(cin>>st)
    {
        if(!strcmp(st,"0"))
            break;
        if(solve())//注意并不是输入什么字符才进行对这些字符的处理,而是整体都考虑
            cout<<"tautology"<<endl;
        else
            cout<<"not"<<endl;
    }
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了小程序应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值