全国服务热线:400-6136-679

位置:兰州童程童美少儿编程培训学校 > 学校动态 > 兰州C语言谁在说谎问题

兰州C语言谁在说谎问题

来源:兰州童程童美少儿编程培训学校时间:2022/1/7 14:57:05

    问题描述
    现有张三、李四和王五3个人,张三说李四在说谎,李四说王五在说谎,而王五说张三和李四两人都在说谎。要求编程求出这3个人中到底谁说的是真话,谁说的是假话。
    问题分析
    显然该题是一个逻辑推断问题。张三、李四和王五3个人都可能说真话,也都可能说假话,那么如何来判断他们到底谁在说谎呢?
    由问题描述可得到如下3个结论:
    由于“张三说李四在说谎”,因此,如果张三说的是真话,则李四就在说谎;反之,如果张三在说谎,则李四说的就是真话。
    由于“李四说王五在说谎”,因此,如果李四说的是真话,则王五就在说谎;反之,如果李四在说谎,则王五说的就是真话。
    由于“王五说张三和李四两人都在说谎”,因此,如果王五说的是真话,则张三和李四两人都在说谎;反之,如果王五在说谎,则张三和李四两人至少一人说的是真话。
    算法设计
    该问题同样可用穷举法进行解决。
    首先将问题分析中得到的3个分析结果用表达式表达出来。用变量x、y和z分别表示张三、李四和王五3人说话真假的情况,当x、y或z的值为1时表示该人说的是真话,值为0时表示该人说的是假话。则问题分析中的3个结论可以使用如下的表达式进行表示:
    x==1&&y==0表示张三说的是真话,李四在说谎;
    x==0&&y==1表示张三在说谎,李四说的是真话;
    y==1&&z==0表示李四说的是真话,王五在说谎;
    y==0&&z==1表示李四在说谎,王五说的是真话;
    z==1&&x==0&&y==0表示王五说的是真话,则张三和李四两人都在说谎;
    z==0&&(x+y)!=0表示王五在说谎,则张三和李四两人至少一人说的是真话。
    在C语言中,可以使用一个逻辑表达式来表达出一个复杂的关系。将上面的表达式进行整理获得C语言的表达式如下:
    (x&&!y||!x&&y)&&(y&&!z||!y&&z)&&(z&&x+y==0||!z&&x+y!=0)
    下面是完整的代码:
    #include
    intmain()
    {
    intx,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.",x?"真话":"假话");
    printf("李四说的是%s.",y?"真话":"假话");
    printf("王五说的是%s.",z?"真话":"假话");
    }
    return0;
    }
领取试听课
每天限量名额,先到先得

尊重原创文章,转载请注明出处与链接:http://www.peixun360.com/663/news/471549/违者必究! 以上就是兰州童程童美少儿编程培训学校 小编为您整理 兰州C语言谁在说谎问题的全部内容。

温馨提示:提交留言后老师会第一时间与您联系!热线电话:400-6136-679