谁在说谎

2021-12-08  本文已影响0人  一路向后

1.问题描述

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

2.源码实现

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

short isMatch(int a, int b, int c)
{
    if(a == 1 && b == 1)
    {
        return 0;
    }

    if(a == 0 && b == 0)
    {
        return 0;
    }

    if(b == 1 && c == 1)
    {
        return 0;
    }

    if(b == 0 && c == 0)
    {
        return 0;
    }

    if(c == 1 && (!(a == 0 && b == 0)))
    {
        return 0;
    }

    if(c == 0 && (a == 0 && b == 0))
    {
        return 0;
    }

    return 1;
}

int main()
{
    int a = 0, b = 0, c = 0;
    int q[3] = {0};
    int i, j = 0;

    for(i=0; i<8; i++)
    {
        q[0] = (i & 1);
        q[1] = ((i >> 1) & 1);
        q[2] = ((i >> 2) & 1);

        if(isMatch(q[0], q[1], q[2]))
        {
            a = q[0];
            b = q[1];
            c = q[2];

            j++;
        }
    }

    printf("probability = %d\n", j);

    printf("张三说的是%s\n", a ? "真话" : "假话");
    printf("李四说的是%s\n", b ? "真话" : "假话");
    printf("王五说的是%s\n", c ? "真话" : "假话");

    return 0;
}

3.编译源码

$ gcc -o test test.c -std=c89

4.运行及其结果

$ ./test
probability = 1
张三说的是假话
李四说的是真话
王五说的是假话
上一篇下一篇

猜你喜欢

热点阅读