张山说:不是我。李四说:是王五。王五说:是赵六。赵六说:不是我。
代码如下:
#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句为真