C趣味程序百例(16)谁是窃贼

C趣味程序百例(16)谁是窃贼,第1张

C趣味程序百例(16)谁是窃贼,第2张

51.谁是小偷?公安人员审问了四名盗窃嫌疑犯。已知这四个人中只有一个是小偷,也知道这四个人中的每一个要么是诚实的,要么总是说谎。针对公安人员的质疑:
甲说:“乙没偷,丁偷。”
B说:“我没偷。是C做的”
C说:“不是A偷的,是B偷的。”
丁说:“不是我偷的。”
请根据这四个人的回答判断谁是小偷。
*问题分析及算法设计
假设A、B、C、D分别代表四个人,变量的值为1,表示这个人是小偷。
从题目可知,四个人中只有一个是小偷,而这四个人中的每一个要么说真话,要么说假话。作为A,B,C都说了两个字:“X没偷,X偷了”,他提到的两个人中肯定有一个是贼,不管他有没有撒谎。所以,你在列举条件表达式的时候,并不在乎谁在说谎,谁在说真话。这样就可以列出以下条件表达式:
A说“B没偷,丁偷。”B+D=1
B说:“不是我偷的,是C偷的。”+C = 1
C说:“A没偷,B偷了。”A+B=1
丁说:“不是我偷的。”A+B+C+D=1
其中D只说了一句话,无法判断真假。表达反映了四个人中只有一个是贼的情况。
*程序和程序注释
# include
void main()
{
int I,j,a[4];
for(I = 0;I {
for(j = 0;j if(j = = I)a[j]= 1;
else a[j]= 0;
if(a[3]+a[1]= 1 & & a[1]+a[2]= 1 & & a[0]+a[1]= 1)/*判断条件是否成立*/
{[/br/* Established */
for(j = 0;j if(a[j])printf("%c . ",j+' A ');
printf(" \ n ");
}
}
}
*运行结果
小偷是B. (B在偷东西。)

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » C趣味程序百例(16)谁是窃贼

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情