Posted on 2008-10-16 15:15
岁月流逝 阅读(376)
评论(0) 编辑 收藏 引用
给你一系列BOOL变量和运算操作符,判断输入的式子是不是永真式!
这题一共只有5个变量,这样的话一共才32种情况用栈模拟下二元运算,做些处理就可以了!
#include "stdio.h"
bool isop(char c)
{
if(c=='K'||c=='A'||c=='C'||c=='E')
return true;
return false;
}
int main()
{
char s[101];
int num[1000];
int i,j;
int mystack[10000];
int myindex;
while(gets(s))
{
if(s[0]=='0')
break;
for(i = 0;i<32;i++)
{
num['p'] =(i>>0)&1;
num['q'] =(i>>1)&1;
num['r'] =(i>>2)&1;
num['s'] =(i>>3)&1;
num['t'] =(i>>4)&1;
myindex = 0;
for(j = 0;s[j]!='\0';j++)
{
if(isop(s[j])||s[j]=='N')
{
mystack[myindex] = s[j];
myindex++;
}
else
{
mystack[myindex] = num[s[j]]+'0';
mystack[myindex+1] = 0;
if(isop(mystack[myindex-1]))
{
myindex++;
continue;
}
while(myindex>=1&&!isop(mystack[myindex-1]))
{
if(mystack[myindex-1]=='N')
{
mystack[myindex-1]=1-(mystack[myindex]-'0')+'0';
mystack[myindex]=0;
myindex--;
}
else
{
if(mystack[myindex - 2] == 'A')
mystack[myindex - 2] = ((mystack[myindex - 1] - '0') | (mystack[myindex] - '0')) + '0';
else if(mystack[myindex - 2] == 'K')
mystack[myindex - 2] = ((mystack[myindex - 1]- '0') & (mystack[myindex] - '0')) + '0';
else if(mystack[myindex - 2]== 'C')
mystack[myindex - 2] = 1 - (((mystack[myindex - 1] - '0') & (1 - (mystack[myindex] - '0')))) + '0';
else if(mystack[myindex - 2] == 'E')
mystack[myindex - 2] = (1 - ((mystack[myindex - 1]- '0') ^ (mystack[myindex] - '0'))) + '0';
myindex -= 2;
mystack[myindex +1] = 0;
}
}
myindex++;
}
}
if(mystack[0]=='0')
break;
}
Tags -
永真式 ,
pku
文章来源:
http://www.feng5166.com/blog/read.php?121