A说B在说谎,B说c在说谎,C说。A和B在说谎,如何用逻辑表达式判断出谁在说谎

2024-11-26 00:30:43
推荐回答(5个)
回答1:

真话看成1,假话看成0,那么ABC可以看成3位二进制数,所有情况就是二进制数自增。
考虑扩展,自增函数我写的任意位数二进制通用。如果想添加D、E、F。。。改一下规则函数isTrue就行。
按照本题,规则A*B==0 && B*C==0 && A==B。

#include 
#include 
#include 
char *add_abc(char *abc);// 二进制加1
int isTure(char *abc);//判断假设是否成立,成立返回1,不成立返回0
int main()
{
    char *abc=NULL;
    abc=(char *)malloc(sizeof(char)*4);
    strcpy(abc,"000");
    while(1)
    {
        printf("假设A说%s,B说%s,C说%s,假设%s\n",abc[0]-'0'?"真话":"假话",abc[1]-'0'?"真话":"假话",abc[2]-'0'?"真话":"假话",isTure(abc)?"成立":"不成立");
        abc=add_abc(abc);
        if(!strcmp(abc,"000"))
            break;
    }

    return 0;
}
int isTrue(char *abc)//判断假设是否成立,成立返回1,不成立返回0
{
    int a=abc[0]-'0',b=abc[1]-'0',c=abc[2]-'0';
    if(a*b==0 && b*c==0 && a==b)
        return 1;
    return 0;
}
char *add_abc(char *abc)// 二进制加1
{
    int i,n=strlen(abc),jin=0;

    for(i=n-1;i>=0;i--)
        if(i==n-1)
            if(abc[i]=='0')
                abc[i]='1';
            else
            {
                abc[i]='0';
                jin=1;

            }
        else
            if(abc[i]-'0'+jin<2)
            {
                abc[i]=abc[i]-'0'+jin+'0';
                jin=0;
            }
            else
            {
                abc[i]='0';
                jin=1;
            }
    return abc;
}

回答2:

a第一个提出可以排除,而b被提出后并没有反过来说a,而是说了c,c不知情,就说了两人。所以,b在说谎

回答3:

①如果A说谎,
B则没说谎,
那么C则也在说谎。
😎😎😎😎😎😎😎😎
②如果A没说谎,
那么B说谎了,
则B说C说谎不成立,
即C说实话了,
这与C说A和B在说谎矛盾!
😎😎😎😎😎😎😎😎😎😎
用A表示A说谎,~A表示A没有说谎,
~A→B,
~B→C,
~C→A&B。

回答4:

A→B
B→C
C→A·B

回答5:

B 说谎