c精彩编程挑战高手3

来源:百度知道 编辑:UC知道 时间:2024/05/31 13:15:01
谜语博士的数学难题
诚实族和说谎族是来自两个荒岛的不同民族,诚实族永远说真话,说谎族永远说假话。
两面族是又一个荒岛上的新兴民族,他们的特点是说话真一句假一句,若第一句为真
话,第二句必为假话;若第一句为假话第二句则为真话。但第一句话真假是不定的。
谜语博士是个聪明人,他要判断所遇到的人是哪个族的。谜语博士这次遇到三个人,
为了调查他进行询问:
A你是哪个族的?A:诚实族的
B你是哪个族的?说谎族的
B你说A真是诚实族的吗?B:是的
C你是什么族的?C:诚实族的
C你说A是什么族的?C:两面族的
请问他们分别是什么族的?

好问题。需要思考,又不啰嗦。
#include <stdio.h>

int main()
{int a,b,c,i,j,k; /* a-c各个值为1表示是诚实族,i-k各个值为1表示是两面族 */
b=0;/* 由已知得第二个人只能是两面族 */
j=1;
for(a=0;a<=1;a++)
for(c=0;c<=1;c++)
for(i=0;i<=1;i++)
for(k=0;k<=1;k++)
if((a&&!i||!a)&&(a&&!i)&&((c&&!k)&&(!a&&i)||(!c&&k)&&(!a&&i)||(!c&&!k)&&(!i)))
{ printf("A is %s.\n",i?"double-dealer":(a?"honest":"lier"));
printf("B is %s.\n",j?"double-dealer":(b?"honest":"lier"));
printf("C is %s.\n",k?"double-dealer":(c?"honest":"lier"));
printf("\n\n");
}
system("pause");
return 0;
}