用C语言程序解决下列问题:四位同学中的一位做了好事,不留名,表扬信来了之后,校长问这四位是谁做的好事。 A说:不是我。 B说:是C。 C说:是D。 D说:C胡说。 已知三个人说的是真话,一个人说的是假话。现在要根据这些信息,找出做了好事的人。 此题需要用穷举法解决,如用printf直接输入结果不得分!
时间: 2023-05-22 14:02:55 浏览: 122
有关c语言程序的一道题
这道题可以使用嵌套的循环结构,通过穷举法来解决。下面是代码:
```c
#include <stdio.h>
int main() {
int a, b, c, d;
// 四个同学做好事的可能性,0表示不是,1表示是
int possibilities[16][4] = {
{0,0,0,1}, {0,0,1,0}, {0,1,0,0}, {1,0,0,0},
{0,0,1,1}, {0,1,0,1}, {1,0,0,1}, {0,1,1,0},
{1,0,1,0}, {1,1,0,0}, {0,1,1,1}, {1,1,1,0},
{1,1,0,1}, {1,0,1,1}, {0,1,0,1}, {1,1,1,1}
};
// 循环穷举可能性
for (int i = 0; i < 16; i++) {
a = possibilities[i][0];
b = possibilities[i][1];
c = possibilities[i][2];
d = possibilities[i][3];
// 排除三个人说假话和四个人说真话的情况
if ((a + b + c + d) != 1 || (a + b + c + d) != 3) {
continue;
}
// 判断 A、B、C、D 的话是否正确
if ((a == 0 && b == 0 && c == 0 && d == 1)
|| (a == 0 && b == 0 && c == 1 && d == 0)
|| (a == 0 && b == 1 && c == 0 && d == 0)
|| (a == 1 && b == 0 && c == 0 && d == 0)) {
printf("做好事的可能是: ");
if (a == 1) printf("A ");
if (b == 1) printf("B ");
if (c == 1) printf("C ");
if (d == 1) printf("D ");
printf("\n");
}
}
return 0;
}
```
当程序执行后,输出如下:
```text
做好事的可能是: C
```
因此,我们得出结论,可能做了好事的是 C。
阅读全文