POJ 3295 Tautology(似乎是模拟?…

来源:互联网 发布:星际战甲捏脸数据女 编辑:程序博客网 时间:2024/06/03 17:36

题目链接:http://poj.org/problem?id=3295

 

题意:现规定K,A,N,C,E五种运算,p,q,r,s,t为五个只有0和1状态的变量,给定一个含有这几个字符的字符串,判断无论p,q,r,s,t的取值,结果是否均为真(即永真式)

 

哭死了,发现这个题目无论怎么写,用c和c++提交均WA,Gcc和G++就对了,郁闷,以为只是用了位运算才这样呢,没想到没用位运算也是WA……

 

代码一目了然:

C语言: 高亮代码由发芽网提供
#include<stdio.h>
#include<string.h>

intK[2][2]={0,0,0,1},A[2][2]={0,1,1,1},N[2]={1,0},
   C[2][2]={1,1,0,1},E[2][2]={1,0,0,1};
intp,q,r,s,t,k;
charstr[108];

intcal()
{
   k++;
   switch(str[k])
   {
   case 'K':return K[cal()][cal()];
   case 'A':return A[cal()][cal()];
   case 'N':return N[cal()];
   case 'C':return C[cal()][cal()];
   case 'E':return E[cal()][cal()];
   case 'p':return p;
   case 'q':return q;
   case 'r':return r;
   case 's':return s;
   case 't':return t;
   }
}

intmain()
{
   int flag;
   while(scanf("%s",str),strcmp(str,"0"))
   {
      flag=1;
      for(p=0;p<=1&&flag;p++)
         for(q=0;q<=1&&flag;q++)
             for(r=0;r<=1&&flag;r++)
                for(s=0;s<=1&&flag;s++)
                   for(t=0;t<=1&&flag;t++)
                   {
                       k=-1;
                       if(!cal())flag=0;
                   }
      if(flag)printf("tautology\n");
      else printf("not\n");
   }
   return 0;
}
原创粉丝点击