当前位置:首页 » 编程语言 » c语言判断三人说真话
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言判断三人说真话

发布时间: 2022-11-03 03:23:59

1. 怎么样求解一道关于逻辑推理的题目,用c语言实现。比如破案,比如谁谁在撒谎,比如谁谁说的是真话。

比较费劲,我觉得关键是一定要搞清楚 要用什么条件表达式表示真假的组合。然后套在一堆儿循环里遍历所有的情况,找个所有条件都满足的就是了。

2. C语言解题:

#include <stdio.h>
main()
{
int a,b,c,d; //定义四个变量 用来表示他是否是小偷,为1表示是小偷,0表示不是小偷
int i=1; //定义变量i用来测试4个人的说话情况
a=b=c=d=0;
while((a+b+c+d)!=1) //小偷只有一个 当他们所说的情况之和为1 说明假设是正确的
{
switch(i++)
{
case 1:a=1;c=1;d=1;d=0;break; //设第1个人说的是假话
case 2:a=0;c=0;d=1;d=0;break; //设第2个人说的是假话
case 3:a=0;c=1;d=0;break; //设第3个人说的是假话
case 4:a=0;c=1;d=1;break; //设第4个人说的是假话
default:break;
}
}
printf("第%d人说的是谎话",i-1);

}

3. C语言编程: 张三说李四说谎,李四说王五说谎,王五说张三和李四都说谎。问谁真谁假。

张三、李四、王五都是假。
真要这么问就是这么回答,因为编程语言就是这么执行的,执行到最后一步,我们不管是谁说,只要能运行就默认执行了,他说了那就是对了,执行到最后一步那就是最后一步了。我用编程语言简单表达:
//我初始化三个人,默认都没说谎
public const string s="没说谎";
public const string l="说谎";
public string 张三=s;
public string 李四=s;
public string 王五=s;
//开始告密事件
private void says()
{
李四=l; //说过了李四是说谎
王五=l; //说过了王五是说谎
张三=l; //说过了张三是说谎
李四=l; //再次赋值说过了李四还是在说谎
print 张三,李四,王五;
}

4. 用c语言的if switch来完成 已经四个人 有一个做了好事的人 三个说真话的

char peo[4] = {};
int laird_index,find_index = -1;
for(int i = 1;i < 4;++i)
{
// A说,不是A B说,是D
// C说,是D D说, C说谎 可以把这句话理解为: 不是D;
laird_index = i;
switch (laird_index) //假设这个说谎的人 是 a - d; 说谎的人说的话,就不算数,被注释;
{
case 0://A说谎
{
//peo[0] +=1;
peo[3] +=1;
peo[3] +=1;
peo[3] -=1;
break;
}
case 1://b说谎
{
peo[0] -=1;
//peo[3] -=1;
peo[3] +=1;
peo[3] -=1;
break;
}
case 2://c说谎
{
peo[0] -=1;
peo[3] +=1;
//peo[3] +=1;
peo[3] -=1;
break;
}
case 3://d说谎
{
peo[0] -=1;
peo[3] +=1;
peo[3] +=1;
//peo[3] -=1;
break;
}
}
//验证下; 这个数组必定有 且仅有一个人 被 大于1个人所承认;
//并且 不关 bc的事,因为没有人承认过他们;
//所以 好人只能是 A、D之中产生;

if(peo[0]< 0 && peo[3] > 0)
{
find_index = 3;
break;
}
else if(peo[0] > 0 && peo[3] < 0)
{
find_index = 0;
break;
}
}
switch (find_index)
{
case -1:
cout<<"没有找到"<<endl;break;
case 0:
cout<<"好人是A"<<endl;break;
case 3:
cout<<"好人是D"<<endl;break;
}

5. c语言 张三说李四在说谎,李四说王五在说谎,王五说张三和李四都在说谎。现在问:这三人中到底谁说的是真

如果连这种问题你都搞不定的话,别学计算机了.结果是:张三在说谎,李四说真话,王五说谎.这种问题一般先假定一真,再来逻辑推理得出结论

6. 关于C语言问题 张三李四王五说谎的问题

就是让 王五说张三和李四都在说谎 这个条件成立
(c&&a+b==0||!c&&a+b!=0))
如果张三说的是真的 c&&a+b==0就是1
否则!c&&a+b!=0就是1

if里的三个条件都是1 的时候 此时的三个人说谎与否的情况就是对的

7. 张三说李四在说谎,李四说王五在说谎,王五说张三和李四都在说谎。谁是真的,谁是假的,用c语言做

#include<stdio.h>
int isreal(int,int,int);
int main()
{
int p[3];//假使说谎值为0 没说谎值为1 3人实际就是000~111的二进制数组合
char *szhang3="真话",*sli4="真话",*swang5="真话";
p[0]=0;p[1]=0;p[2]=0;
while(1)
{
if(isreal(p[0],p[1],p[2])==1)
{
if(p[0]==0)
{
szhang3="假话";
}
if(p[1]==0)
{
sli4="假话";
}
if(p[2]==0)
{
swang5="假话";
}
printf("张三说的是%s,李四说的是%s,王五说的是%s",szhang3,sli4,swang5);
}
if(++p[2]>1)
{
p[2]=0;
if(++p[1]>1)
{
p[1]=0;
if(++p[0]>1)
{
p[0]=0;
}
}
}
if(p[0]==0 && p[1]==0 && p[2]==0)
{
break;
}
}
return 1;
}
int isreal(int zhang3,int li4,int wang5) //把三人假定值传入,返回1假设成立; 返回0假设不成立
{
if(zhang3!=li4 && li4!=wang5 && wang5!=(zhang3+li4))
{
return 1;
}
return 0;
}

8. 关于C语言编程问题

/*想了一会儿,不知你觉得怎样*/
#include <stdio.h>
main()
{
int a,b,c,d;
a = 1;b = 1;c = 1;d = 1;
while((a+b+c+d)!=3) /*当只有一个为 0 时 则为 0 的说法错误*/
{
if(a==1) /*A说:不是我;则维持假设(都正确) */
{;}
if(b==1) /*B说:是C;则c说法错误,a,b,d正确 */
{c=0;a=b=d=1;}
if(c==1) /*C说:是D;则d说法错误,a,b,c正确 */
{d=0;a=b=c=1;}
if(d==1) /*D说:他胡说;则c说法错误,a,b,d正确 */
{c=0;a=b=d=1;}
}
printf("a=%d b=%d c=%d d=%d\n",a,b,c,d);
if(a==0)
printf("A is lying\n");
if(b==0)
printf("B is lying\n");
if(c==0)
printf("C is lying\n");
if(d==0)
printf("D is lying\n");

}
/*用C编写一段程序:
有四个人,其中有一个人做了好事,但他们都有自己不同的说法:
A说:不是我;
B说:是C;
C说:是D;
D说:他胡说;

四人中只有一人是说假话,其余三人都是说真话。不能使用数组、指针。
*/

9. 张三说李四在说谎,李四说王五在说谎,王五说张三和李四都在说谎。现在问:这三人中到底谁说的是真话,谁

李四说的真话。

以下内容转载自:网页链接

(第一篇博文)

今天在一个交流群里见他们无聊,然后找到之前收藏的一些c语言题目放出去想让他们做,结果反倒是自己不会做,于是花了很多时间去想。

原题:张三说李四在说谎,李四说王五在说谎,王五说张三和李四都在说谎。现在问:这三人中到底谁说的是真话,谁说的是假话?

其实问题本身并不难,只是一开始想多了,陷入死循环。

那这个问题的突破口在哪里呢?

不管谁说谎,每个人都有两个状态 真和假

由此,我们就可以确定,我们有循环嵌套:


10. a说b说谎,b说c说谎,c说ab说谎,用c语言如何判断,谁说的是真话谁说的是假话

假设c说的正确,那么a是假话,则a说b说谎是假的,则b说的是真话,若b是真话,通过b说c说谎,那c就是假话,与前面假设的条件不符,则c一定说的是假话