深圳某公司招程序员的两道逻辑推理题----答案已经公布,如何编程解决? (100分)

C

cee

Unregistered / Unconfirmed
GUEST, unregistred user!
要求不高,在 45 分钟内给出正确答案
第一题:
aa先生、他的妹妹、他的儿子、还有他的女儿,都是网球选手。关于这四个人,有以下情况:
(1)最佳选手的孪生同胞与最差选手性别不同;
(2)最佳选手与最差选手年龄相同。
这四人中谁是最佳选手?
第二题
一天晚上,在一个由一对夫妇和他们的儿子、女儿组成的四口之家中,发生了一起谋杀案。家庭中的一个成员杀害了另一个成员;其他两个成员,一个是目击者,另一个是凶手的同谋。
(1)同谋和目击者性别不同。
(2)最年长的成员和目击者性别不同。
(3)最年轻的成员和被害者性别不同。
(4)同谋的年龄比被害者大。
(5)父亲是最年长的成员。
(6)凶手不是最年轻的成员。
答案(从原题同样的来源处摘录)
第一题:
aa先生、他的妹妹、他的儿子、还有他的女儿,都是网球选手。关于这四个人,有以下情况:
(1)最佳选手的孪生同胞与最差选手性别不同;
(2)最佳选手与最差选手年龄相同。
这四人中谁是最佳选手?
由于(2)
最佳和最差不只可能同时出现在aa先生和他妹妹或者是那年轻兄妹两对中,还可能出现在姑姑和孩子中,就是说aa先生的妹妹aa先生的孩子可能是同龄。(当然aa先生和他的子女不是同龄了)
由于(1)
说明了最佳选手和最差选手是同性别的
那么鉴于以上推断可以的出:最佳和最差必然是aa先生的妹妹和他的女儿两人。那么怎么推断出谁是最佳呢?很简单,已经从上面推断得出aa先生和他的妹妹不可能是孪生(父亲和孪生子女不可能同龄,而aa先生的妹妹和他的子女同龄),因为最佳选手有孪生同胞,所以最佳选手是女儿。
整理结论:
年龄关系:aa先生最大,妹妹、女儿和儿子三人同龄,其中女儿和儿子为孪生。
最佳:女儿;最差:妹妹。
第二题
一天晚上,在一个由一对夫妇和他们的儿子、女儿组成的四口之家中,发生了一起谋杀案。家庭中的一个成员杀害了另一个成员;其他两个成员,一个是目击者,另一个是凶手的同谋。
(1)同谋和目击者性别不同。
(2)最年长的成员和目击者性别不同。
(3)最年轻的成员和被害者性别不同。
(4)同谋的年龄比被害者大。
(5)父亲是最年长的成员。
(6)凶手不是最年轻的成员。
------------------------------------------
[答案]
由于上面的条件,可以逐一推断以下结果:
1, 凶手和死者也是不同性别
2, 最年长的不可能是目击,
3, 最年轻不是被害,
4, 被害者不是最年长的,同谋也不是最年轻的
5, 父亲不是目击者,
6, 最年轻者只可能是同谋或者目击(参见原条件3)
下面根据多条件组合得出一些结论:
1,目击者是女性,同谋为男性(参见原条件1、2、5),可以推断出同谋必然是父亲或者儿子之一,目击者必然是母亲或者女儿之一。 最年轻的必然是目击者(参见原条件3、4、6),并且由于母亲比女儿大,得出:女儿是最年轻的并且是目击者。那么也可以看出,同谋是父亲(参见原条件4,并且父亲比儿子大)。可以得出:被害者是儿子(参见原条件3)。母亲是凶手。
整理结论:按年龄顺序排列:
父亲最大(同谋),母亲其次(凶手),儿子第三(可怜的死者),女儿最小(目击)
对以上两题有一个说明:不考虑父母和子女非亲生关系,即不考虑他们存在年龄相同或者长辈比小辈年轻的关系。那属于过于极端的情况。
相关贴子:http://www.delphibbs.com/delphibbs/dispq.asp?lid=1915499
 
这2道题目如果是第一次看见的话,我想很少有人能够在45分钟内完成的。
 
MD,简直是脑筋急转弯
 
猜答案容易,但是编程实现不知道
 
编程也不难,用离散数学里面的数理逻辑部分的逻辑推理.
通用的自动定理证明是比较难的,而且在逻辑变量数目比较大的时候也很罗嗦.
但这两题是特例,且逻辑变量都很少.呵呵.
 
太深奥了,还是不要理论的好,不知道我那个算法要得不,但确实和答案一致 http://www.delphibbs.com/delphibbs/dispq.asp?lid=1915499
 
20 minutes
but I can't program.
 
struct PersonInfo
{
int age;
bool best;
int worst;
int gender;
int twin;
}person[4];
person[0].twin=1;
person[0].age=1;
person[0].gender=0;

person[1].age=0;
person[1].gender=1;
person[1].twin=0;
person[2].age=0;
person[2].gender=0;
person[2].twin=3;
person[3].age=0;
person[3].gender=1;
person[3].twin=2;
CString str;
int y=100;
PersonInfo *Best,*Worst;
int i,j;
for (i=0;i<4;i++)
for (j=0;j<4;j++)
{
if (i!=j)
{
Best=&amp;person[j];
Worst=&amp;person;
if (person[Best->twin].gender!=Worst->gender&amp;&amp;Best->age==Worst->age&amp;&amp;person[Best->twin].age==Best->age)
{
str.Format("%d %d",j,i);
dc.TextOut(100,y,str);
y+=20;
}
}
}
第二题:
struct PersonInfo{
int age;
int gender;
}person[4];
person[0].age=4;
person[1].age=3;
person[2].age=1;
person[3].age=1;
person[0].gender=0;
person[1].gender=1;
person[2].gender=0;
person[3].gender=1;
PersonInfo *murderer,*accomplice,*victim,*eyewitness;
int i,j,k,y=100;
CString str;
for (i=0;i<4;i++)
for(j=0;j<4;j++)
for(k=0;k<4;k++)
{
if (i!=j&amp;&amp;i!=k&amp;&amp;j!=k)
{ person[2].age=1;
person[3].age=1;
murderer=&amp;person;
accomplice=&amp;person[j];
victim=&amp;person[k];
eyewitness=&amp;person[6-i-j-k];
if (accomplice->gender!=eyewitness->gender&amp;&amp;eyewitness->gender==1&amp;&amp;accomplice->age>=victim->age&amp;&amp;murderer->age!=1)
{
if (accomplice->age!=1)
{
str.Format("%d,%d,%d,%d",i,j,k,6-i-j-k);
dc.TextOut(100,y,str);
y+=20;
}
}

}
}
 
借楼主的宝地一用.
我找到了合取,析取,非,蕴涵,等价的符号.
可怎么也找不到全称量词(A上下颠倒)和存在量词(E左右颠倒)的符号.
哪位好心贴出来让我好ctrl+C,一定开贴给分.
 
有点难度,但多做一些这样的题目,有助于逻辑思维能力的提高啊!!!
 
简单推理题 可以采取假设逆推的方法
编程的话 第一题还难些, 有个隐含条件 aa的mm 呵呵子女同龄 郁闷
LeeChange 可以参阅 形式逻辑
 
∨ ??是不是这个啊?
νЗ
找着几个象的 呵呵
word里是没有了。。。
 
接受答案了.
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
顶部