C语言 编程题 求大神解答?
3个回答
展开全部
展开全部
#include <stdio.h>
int main()
{
const char* c[4] = {"A", "B", "C", "D"};
int a[4] = {0}; // a0, a1, a2, a3
int b[4], res = -1;
for (int i = 0; i < 4; i++)
{
a[i] = 1; // 有1人嫌疑,不妨设是i(i取0,1,2,3分别对应A,B,C,D)
b[0] = (a[0] == 0); // A所说(A:不是我)
b[1] = (a[2] == 1); // B所说(B:是C)
b[2] = (a[3] == 1); // C所说(C:是D)
b[3] = (a[3] == 0); // D所说(D:C在胡说)
for (int j = 0; j < 4; j++)
{
// 已知:3个说的是真话,1个是假话
// 不妨设j说谎
b[j] = !b[j];
// 检查是否满足:3个说的是真话,1个是假话
if (b[0] && b[1] && b[2] && b[3])
{
res = i;
break;
}
// j没说谎,复位
b[j] = !b[j];
}
if (res >= 0)
{
printf("推断出是:%s\n", c[res]);
break;
}
a[i] = 0; // 不是i,复位
}
}
int main()
{
const char* c[4] = {"A", "B", "C", "D"};
int a[4] = {0}; // a0, a1, a2, a3
int b[4], res = -1;
for (int i = 0; i < 4; i++)
{
a[i] = 1; // 有1人嫌疑,不妨设是i(i取0,1,2,3分别对应A,B,C,D)
b[0] = (a[0] == 0); // A所说(A:不是我)
b[1] = (a[2] == 1); // B所说(B:是C)
b[2] = (a[3] == 1); // C所说(C:是D)
b[3] = (a[3] == 0); // D所说(D:C在胡说)
for (int j = 0; j < 4; j++)
{
// 已知:3个说的是真话,1个是假话
// 不妨设j说谎
b[j] = !b[j];
// 检查是否满足:3个说的是真话,1个是假话
if (b[0] && b[1] && b[2] && b[3])
{
res = i;
break;
}
// j没说谎,复位
b[j] = !b[j];
}
if (res >= 0)
{
printf("推断出是:%s\n", c[res]);
break;
}
a[i] = 0; // 不是i,复位
}
}
追问
哇 厉害 不过visual c++编译不出来 显示有一个错误 我找不到哪里有错误
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
...........这个就需要你把选项逐个套进入题目中看看是否满足要求啦......
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询