您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息
免费发信息
三六零分类信息网 > 达州分类信息网,免费分类信息发布

C语言 谁在说谎问题

2020/3/29 21:12:23发布139次查看

问题描述
现有张三、李四和王五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
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. ,x?真话:假话);
printf(李四说的是%s. ,y?真话:假话);
printf(王五说的是%s. ,z?真话:假话);
}
return 0;
}

达州分类信息网,免费分类信息发布

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录