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
张三说的是假话
李四说的是真话
王五说的是假话
网友评论