POJ 3295 Tautology(似乎是模拟?…

题目链接: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……

 

代码一目了然:

#include<stdio.h>
#include<string.h>

int K [ 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 };
int p , q , r ,s , t , k;
char str [ 108 ];

int cal()
{
    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;
    }
}

int main()
{
    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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值