Posted on 2008-10-16 15:15
歲月流逝 閱讀(379)
評論(0) 編輯 收藏 引用
給你一系列BOOL變量和運(yùn)算操作符,判斷輸入的式子是不是永真式!
這題一共只有5個變量,這樣的話一共才32種情況用棧模擬下二元運(yùn)算,做些處理就可以了!
#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