人工智能50811设有两个聪明的先生S和P,以及两个自然数X和Y,2<=X,Y<=99。S先生知道这两个数之和S,P先生知道这两个数之积P。S先生和P先生有下面一段对话:S:我不知道这两个数是什么,但是我确信你也不知道。P:听了你这句话,我就知道这两个数了。S:现在我也知道了。你能从他们的对话中推断出这两个数是什么吗?解答:(1)S先生说:“我不知道这两个数。”,这就可知S决不是:4(=2+2),5(=2+3),197(=98+99),198(=99+99)。(2)S先生说:“我确定你也不知道这两个数。”,这就可知P决不是:两端的数之积,如4(=2*2),6(=2*3),8=(2*4),10(=2*5),…9801(=99*99),9702(=98*99),9604(=98*98)。素数或者素数之积,如5,7,11,…25(=5*5),35(=5*7)。如此一来,就可以初步总结出S可能的数的集合:S={11,17,23,27,29,35,37,41,47,53}。同理,可初步总结出P可能的数的集合。但此时P的数目还是很大的,总计有6817个。P={12,16,18。。。4317,4318,4319。。。9798,9799,9800}(3)P先生说:“一听你的话,我就知道了。”,这是可以判断P的可能数值的。我们这样来分析,将P分解后,将得到多个X,Y的组合,分别求出每个组合对应的S(=X+Y)。那要在什么条件下P先生才能确定唯一的X,Y组合呢?答案就是:当从P中分解出来的多个X,Y组合中有且仅有一个属于S。按照这个方法,P先生就可以把他所知道的P进行分解,然后把分解出来的多个X,Y组合一个个去构成对应的S,这样就可以找到唯一的X,Y组合。(4)S先生说:“我也是,现在我也知道了。”,这样一来,就完全可以判断x,y的数值了。其原理和第3步相同。即将S分解后,将得到多个X,Y的组合,分别求出每个组合对应的P(=X*Y)。当从S中分解出来的多个X,Y组合中有且仅有一个属于P时,就能确定唯一的X,Y组合了。这样,S先生根据自己猜出的集合P,再把自己的S分解成x,y组合,把不同的X,Y组合放到P中去验证,求出唯一的解。最终求出的解为:X=4,Y=13。相应的Prolog程序为Predicatespuzzle(integer,integer,integer,integer)boundd(integer,integer,integer)unique(integer,integer,integer,integer)find(integer,integer,integer)cond1(integer,integer,integer,integer)cond2(integer,integer,integer,integer)cond3(integer,integer,integer,integer)Goalpuzzle(2,99,X,Y),write("Theresultis:"),nl,write("X=",X),nl,write("Y=",Y).Clausespuzzle(Lb,Hb,X,Y):-Hx=Hb/2,boundd(Lb,Hx,X),boundd(X,Hb,Y),cond1(Lb,Hb,X,Y),cond2(Lb,Hb,X,Y),cond3(Lb,Hb,X,Y).boundd
人工智能 来自淘豆网www.taodocs.com转载请标明出处.