poj 3295 Tautology【离散数学之重言式】

Tautology
Time Limit: 1000MS Memory Limit: 65536K
Total Submissions: 10723 Accepted: 4074

 

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

 

题目大意:输入一个逻辑表达式【长度小于100】,逻辑表达式由K,A,N,C,E,p,q,r,s,t,其中

K表示合取,【Kwx即为w合取x,wx均为1时,值才为1】

A表示析取,【Awx即为w析取x,wx均为0时,值才为0】

N表示取反,【Nw即为 非w,若w=0,则Nw=1,若w=1,则Nw=0】

C表示条件,【Cwx即为非w析取x,结合A与N】

E相等,       【Ewx,w与x相等时,值为1,若不同,值为0】

【均为离散数学中的知识点】p,q,r,s,t均只有两个值,1或0;题目要求判断所输入的逻辑表达式是否为重言式【永真式】【即最后的结果全为1】

 

思路:

p,q,r,s,t共有32种,故定义变量 i,for i=0 to i <32;

遇到p,则 p = i & 1;

遇到q,则 q = (i >> 1) &1;

遇到r,则 r= (i >> 2) & 1;

遇到s,则s = (i >> 3) & 1;

遇到t,则 t = (i >> 4) & 1;

比如说判断函数为is_Tautology(char ,int );

遇到K  则 is_Tautology(char ,int ) & is_Tautology();

A  N  C  E【类推 K 】

已Accept代码【c++提交】

 

#include <iostream>
using namespace std;
int n;
char str[101];
bool step ( char str[101], int k ){
	n++;
	switch ( str[n] )
	{
		case 'p': return k & 1;
		case 'q': return ( k >> 1 ) & 1;
		case 'r': return ( k >> 2 ) & 1;
		case 's': return ( k >> 3 ) & 1;
		case 't': return ( k >> 4 ) & 1;
		case 'N': return !step ( str, k );
		case 'K': return step ( str, k ) & step ( str, k );  
		case 'A': return step ( str, k ) | step ( str, k );
		case 'C': return !step (str, k ) | step ( str, k );
		case 'E': return step ( str, k ) == step ( str, k );
	}
}
bool judge ( char str[101] ){
	for ( int i = 0; i < 32; i++ ){
		n = -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;
}
 

 

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值