本文主要是介绍POJnbsp;3295nbsp;Tautology(似乎是模拟?…,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目链接: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;
}
这篇关于POJnbsp;3295nbsp;Tautology(似乎是模拟?…的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!