第1关:逻辑联结词的运算
printf("%3d%3d%3d%3d", p & q, p | q, !p | q, (!p | q) & (!q | p));
第2关:真值表
for (int p = 0; p < 2; p ++ ) {
for (int q = 0; q < 2; q ++ ) {
for (int r = 0; r < 2; r ++ ) {
printf("%d%d%d %d\n", p, q, r, (!p | q) & r);
}
}
}
第3关:命题逻辑推理
for (int p = 0; p < 2; p ++ ) {
for (int q = 0; q < 2; q ++ ) {
for (int r = 0; r < 2; r ++ ) {
for (int s = 0; s < 2; s ++ ) {
for (int t = 0; t < 2; t ++ ) {
if ((p | q) && (!p | !r) && (!s | !t) && (s | r) && t) {
printf("%d%d%d%d%d\n", p, q, r, s, t);
}
}
}
}
}
}
第4关:主析取范式
int count = -1;//计数
for (int p = 0; p < 2; p ++ )
for (int q = 0; q < 2; q ++ )
for (int r = 0; r < 2; r ++ )
if (!(p | q) | r)
count ++ ;
if (count == -1) {//恒假公式
printf("0");
return;
}
for (int p = 0; p < 2; p ++ ) {
for (int q = 0; q < 2; q ++ ) {
for (int r = 0; r < 2; r ++ ) {
if (!(p | q) | r) {//分段
printf("(");
if (!p) printf("¬");
printf("p∧");
if (!q) printf("¬");
printf("q∧");
if (!r) printf("¬");
printf("r)");
if (count) {printf("∨"); count -- ;}
}
}
}
}
第5关:主合取范式
int count = -1;//计数
for (int p = 0; p < 2; p ++ )
for (int q = 0; q < 2; q ++ )
for (int r = 0; r < 2; r ++ )
if (!(!(p | q) | r))
count ++ ;
if (count == -1) {//恒真公式
printf("1");
return;
}
for (int p = 0; p < 2; p ++ ) {
for (int q = 0; q < 2; q ++ ) {
for (int r = 0; r < 2; r ++ ) {
if (!(!(p | q) | r)) {//分段
printf("(");
if (p) printf("¬");
printf("p∨");
if (q) printf("¬");
printf("q∨");
if (r) printf("¬");
printf("r)");
if (count) {printf("∧"); count -- ;}
}
}
}
}