2.1神奇之处
各位在锻炼大脑的时候一定见过不少逻辑问题,
有没有想过让程序解决呢?
一个经典问题:
有ABCD四个人,A说:B偷吃了苹果,B说:是D吃的,C说:不是我,D说:B说谎
现在已知条件为:这四个人中,一人吃了苹果,只有一个人说的是真话
请问:偷吃了苹果的人到底是谁?
这个题目不难,让我们看看做法1:
每个人都有“吃了”和“没吃”两种情况,枚举所有情况2^4=16种就可以了
var x1,x2,x3,x4;
for (x1=0; x1<=1; x1++)//枚举,0为没吃,1为吃了
{
for (x2=0; x2<=1; x2++)
{
for (x3=0; x3<=1; x3++)
{
for (x4=0; x4<=1; x4++)
{
if (x1+x2+x3+x4==1)//只有一人吃了苹果
{
if ((x2==1)+(x4==1)+(x3==0)+!(x4==1)==1)//分别表示四个人的话的真假
{
trace(x1,x2,x3,x4);//输出四个人的情况,1为吃了苹果
}
}
}
}
}
}
这里略微复杂,看看方法2:
只有一人吃苹果,所以枚举4种就可以了
for (var i=1; i<=4; i++)//枚举吃苹果的人是谁
{
if ((i==2)+(i==4)+(i!=3)+!(i==4)==1)//四句话的真伪,和为一表示只有一句真话
{
trace(i);//输出偷吃苹果的人
}
}
各位在锻炼大脑的时候一定见过不少逻辑问题,
有没有想过让程序解决呢?
一个经典问题:
有ABCD四个人,A说:B偷吃了苹果,B说:是D吃的,C说:不是我,D说:B说谎
现在已知条件为:这四个人中,一人吃了苹果,只有一个人说的是真话
请问:偷吃了苹果的人到底是谁?
这个题目不难,让我们看看做法1:
每个人都有“吃了”和“没吃”两种情况,枚举所有情况2^4=16种就可以了
var x1,x2,x3,x4;
for (x1=0; x1<=1; x1++)//枚举,0为没吃,1为吃了
{
for (x2=0; x2<=1; x2++)
{
for (x3=0; x3<=1; x3++)
{
for (x4=0; x4<=1; x4++)
{
if (x1+x2+x3+x4==1)//只有一人吃了苹果
{
if ((x2==1)+(x4==1)+(x3==0)+!(x4==1)==1)//分别表示四个人的话的真假
{
trace(x1,x2,x3,x4);//输出四个人的情况,1为吃了苹果
}
}
}
}
}
}
这里略微复杂,看看方法2:
只有一人吃苹果,所以枚举4种就可以了
for (var i=1; i<=4; i++)//枚举吃苹果的人是谁
{
if ((i==2)+(i==4)+(i!=3)+!(i==4)==1)//四句话的真伪,和为一表示只有一句真话
{
trace(i);//输出偷吃苹果的人
}
}



