4个人有一个人说假话三个人说真话找出说假话的人的算法

时间:2021-08-01 20:00:45

张山说:不是我。李四说:是王五。王五说:是赵六。赵六说:不是我。
代码如下:
#include <iostream>
int main()
{
using namespace std;
char *man[]={"张三","李四","王五","赵六"};
for(int n=0;n<4;n++)                                                     //n既为循环控制变量,也表示第N个人
{if ((n!=0)+(n==2)+(n==3)+(n!=3)==3)                     //如果4句话有3句为真,则是该人说假话
cout<<"说假话的人是:"<<man[n]<<endl;}
return 0;
}

n代表 说谎的,由于不知道谁说谎;
所以假设每个人都有可能说谎,一个一个判断

n==i 代表 说谎的是i
n!=i  代表 说谎的不是i

(n!=0);(n==2);(n==3);(n!=3) 代表4句话 
张山说:不是我。 我就是张山所以这句话 就是“说谎的不是张山”,代码(索引)为0 就是 n!=0
李四说:是王五。这句话完整的意思是“说谎的是王五”,(n==2) 王五代码(索引)为2
王五说:是赵六。这句话完整的意思是“说谎的是赵六”,(n==3) 赵六代码(索引)为3
赵六说:不是我。 我就是赵六所以这句话 就是“说谎的不是赵六”,代码(索引)为3 就是 n!=3

(n!=0)+(n==2)+(n==3)+(n!=3)==3 代表4句话有3句为真