题目链接:http://poj.org/problem?id=3295
题意:现规定K,A,N,C,E五种运算,p,q,r,s,t为五个只有0和1状态的变量,给定一个含有这几个字符的字符串,判断无论p,q,r,s,t的取值,结果是否均为真(即永真式)
哭死了,发现这个题目无论怎么写,用c和c++提交均WA,Gcc和G++就对了,郁闷,以为只是用了位运算才这样呢,没想到没用位运算也是WA……
代码一目了然:
C语言:
高亮代码由发芽网提供
#include<stdio.h>
#include<string.h>
int K [ 2 ][ 2 ] = { 0 , 0 , 0 , 1 }, A [ 2 ][ 2 ] = { 0 , 1 , 1 , 1 },N [ 2 ] = { 1 , 0 },
C
[
2
][
2
]
=
{
1
,
1
,
0
,
1
},
E
[
2
][
2
]
=
{
1
,
0
,
0
,
1
};
int p , q , r ,s , t , k;
char str [ 108 ];
int cal()
{
k
++;
switch(
str
[
k
])
{
case
'K':
return
K
[
cal
()][
cal
()];
case
'A':
return
A
[
cal
()][
cal
()];
case
'N':
return N
[
cal
()];
case
'C':
return
C
[
cal
()][
cal
()];
case
'E':
return
E
[
cal
()][
cal
()];
case
'p':
return p;
case
'q':
return
q;
case
'r':
return
r;
case
's':
return s;
case
't':
return
t;
}
}
int main()
{
int
flag;
while(
scanf(
"%s"
,
str
),
strcmp(
str
,
"0"))
{
flag
=
1;
for(p
=
0;p
<=
1
&&
flag;p
++)
for(
q
=
0;
q
<=
1
&&
flag;
q
++)
for(
r
=
0;
r
<=
1
&&
flag;
r
++)
for(s
=
0;s
<=
1
&&
flag;s
++)
for(
t
=
0;
t
<=
1
&&
flag;
t
++)
{
k
=-
1;
if(
!
cal())
flag
=
0;
}
if(
flag)
printf(
"tautology
\n
");
else
printf(
"not
\n
");
}
return
0;
}
#include<string.h>
int K [ 2 ][ 2 ] = { 0 , 0 , 0 , 1 }, A [ 2 ][ 2 ] = { 0 , 1 , 1 , 1 },N [ 2 ] = { 1 , 0 },
int p , q , r ,s , t , k;
char str [ 108 ];
int cal()
{
}
int main()
{
}