设为首页 加入收藏

TOP

C语言谁在说谎问题代码及解析
2018-12-02 22:08:52 】 浏览:13
Tags:语言 说谎 问题 代码 解析

现有张三、李四和王五3个人,张三说李四在说谎,李四说王五在说谎,而王五说张三和李四两人都在说谎。要求编程求出这3个人中到底谁说的是真话,谁说的是假话。


显然该题是一个逻辑推断问题。张三、李四和王五3个人都可能说真话,也都可能说假话,那么如何来判断他们到底谁在说谎呢?

由问题描述可得到如下3个结论:


该问题同样可用穷举法进行解决。

首先将问题分析中得到的3个分析结果用表达式表达出来。用变量x、y和z分别表示张三、李四和王五3人说话真假的情况,当x、y或z的值为1时表示该人说的是真话,值为0时表示该人说的是假话。则问题分析中的3个结论可以使用如下的表达式进行表示:



C语言中,可以使用一个逻辑表达式来表达出一个复杂的关系。将上面的表达式进行整理获得C语言的表达式如下:


(x&&!y || !x&&y) && (y&&!z || !y&&z) && (z&&x+y==0 || !z&&x+y!=0)


下面是完整的代码:


#include<stdio.h>
int main()
{
    int x, y, z;
    for(x=0; x<=1; x++)
        for(y=0; y<=1; y++)
            for(z=0; z<=1; z++)
                if( ((x&&!y) || (!x&&y)) && ((y&&!z) || (!y&&z)) && ((z&&x==0&&y==0) || (!z&&x+y!=0)) )
                {
                    printf("张三说的是%s.\n",x?"真话":"假话");
                    printf("李四说的是%s.\n",y?"真话":"假话");
                    printf("王五说的是%s.\n",z?"真话":"假话");
                 
                }
    return 0;
}


运行结果:


张三说的是假话.
李四说的是真话.
王五说的是假话.


C语言谁在说谎问题代码及解析



编程开发网
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇C语言求梅森素数代码及解析 下一篇gcc 编译器对‘sqrt’未定义的引..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

array(4) { ["type"]=> int(8) ["message"]=> string(24) "Undefined variable: jobs" ["file"]=> string(32) "/mnt/wp/cppentry/do/bencandy.php" ["line"]=> int(214) }