POJ 3295 Tautology 模拟

题意:判断一个字符串是否是用真式。

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
题解:枚举 p,q,r,s,t 的布尔值,用一个整数表示。
#include <iostream>
using namespace std;

int Nth_Char;
char str[101];

bool step ( char str[101], int logicValue )
{
	Nth_Char++;
	switch ( str[Nth_Char] )
	{
	case 'p': return logicValue & 1;
	case 'q': return ( logicValue >> 1 ) & 1;
	case 'r': return ( logicValue >> 2 ) & 1;
	case 's': return ( logicValue >> 3 ) & 1;
	case 't': return ( logicValue >> 4 ) & 1;
	case 'N': return !step ( str, logicValue );
	case 'K': return step ( str, logicValue ) & step ( str, logicValue );   
	case 'A': return step ( str, logicValue ) | step ( str, logicValue );
	case 'C': return !step (str, logicValue ) | step ( str, logicValue );
	case 'E': return step ( str, logicValue ) == step ( str, logicValue );
	default:;
	}
}

bool judge ( char str[101] )
{
	for ( int i = 0; i < 32; i++ )  /* 枚举p,q,r,s,t的布尔值 */
	{
		Nth_Char = -1;
		if ( !step ( str, i ) )
			return false;
	}
	return true;
}

int main()
{
	while ( cin >> str && str[0] != '0' )
	{
		if ( judge ( str ) )
			cout << "tautology" << endl;
		else
			cout << "not" << endl;
	}
	return 0;PO
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值