POJ- 3295 Tautology

题目链接 传送门

题意就是判断一个逻辑表达式是否为永真式。

这种涉及到表达式的问题一般会使用到栈,但在本题中可以不使用。

首先一共有5个变量,所以最多枚举2^5次方种情况,如果有一种情况为假,就输出"not",否则输出"tautology"。

具体操作见代码。

#include 
#include 
#include 
using namespace std;
int main()
{
	char a[5] = {'p','q','r','s','t'};
	int flag,b[200];
	b['1'] = 1;
	b['0'] = 0;
	string s,f;
	//freopen("in.txt","r",stdin);
	while(cin>>f && f!="0")
	{
		flag = 1;
		for(int i = 0 ; i < 32 ; i++)
		{
			s = f;
			for(int j = 0 ; j < 5 ; j++)
				b[a[j]] = (1< -1 ; j--)
			{
				if(s[j] == 'N')
				{
					s[j] = '1' - b[s[j+1]];
					s.erase(j+1,1);
				}
				else if(s[j] == 'K')
				{
					if(b[s[j+1]] == b[s[j+2]] && b[s[j+1]] == 1)
						s[j] = '1';
					else
						s[j] = '0';
					s.erase(j+1,2);
				}
				else if(s[j] == 'A')
				{
					if(b[s[j+1]]==1||b[s[j+2]]==1)
						s[j] = '1';
					else
						s[j] = '0';
					s.erase(j+1,2);
				}
				else if(s[j] == 'C')
				{
					if(b[s[j+1]]==1&&b[s[j+2]]==0)
						s[j] = '0';
					else
						s[j] = '1';
					s.erase(j+1,2);
				}
				else if(s[j] == 'E')
				{	
					s[j] = b[s[j+1]]==b[s[j+2]] ? '1' : '0';
					s.erase(j+1,2);
				}
			}
			if(b[s[0]] == 0)
			{
				flag = 0 ;
				break;
			}
		}
		cout<<(flag ? "tautology":"not")<

值得一题的是,此份代码在POJ上用C++提交时会WA,但是用G++提交时AC了。。。

所以有时候并不是代码有问题。

你可能感兴趣的:(模拟)