C趣味程序百例(15)谁在说谎

C趣味程序百例(15)谁在说谎,第1张

C趣味程序百例(15)谁在说谎,第2张

50.谁在撒谎
张三说李四在撒谎,李四说王五在撒谎,王五说张三李四都在撒谎。现在,这三个人中谁说的是真话,谁说的是假话?
*问题分析与算法设计
分析题目。每个人都可能说真话,也可能说假话,所以要分别判断每个人说的话。假设三个人的真假话分别用变量A、B、C表示,等于1表示这个人说的是真话;意思是这个人说的是假话。从标题我们可以得到:
*张三说李四在说谎;张三说的是实话:a==1&&b==0
或者张三在撒谎:a==0&&b==1
*李四说王五在撒谎;李四说的是实话:b =王五说张三和李四都在撒谎。王五说的是实话:c==1&&a+b==0
或者王五说的是假话:c==0&&a+b!=0
以上三个条件是AND。C语言中的表达式可以通过整理表达式得到:
(a&& b||!a&&b)&&(b&&!c||!b&&c)&&(c&&a+b==0||!c&&a+b!=0)
列举所有人说真话或假话的可能情况,代入上述表达式进行推理,使上述表达式全部为“真”的情况为正确结果。
*程序和程序注释
# include
void main()
{
int a,b,c;
for(a = 0;a for(b = 0;b for(c = 0;c if((a&&!b||!a&&b)&&(b&&!c||!b&&c)&&(c&&a+b==0||!c&&a+b!=0))
{
printf("张三告诉a % s . " n ",a?《真实》:“谎言”);
printf("Lisi告诉了a %s,\n ",b?“truch”:“lie”);
printf("吴王告诉了a %s,\n ",c?“truch”:“lie”);
}
}
*运行结果
张三说谎
李四说谎。
吴王撒了一个谎。(王五说谎)

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

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情