日期:2014-05-18  浏览次数:20532 次

高手帮忙看看,我出啥问题了?!
微软面试题:
教授选出两个从2到9的数,把它们的和告诉学生甲,把它们的积告诉学生乙,让他们轮流猜这两个数

  甲说:“我猜不出”

  乙说:“我猜不出”

  甲说:“我猜到了”

  乙说:“我也猜到了”

  问这两个数是多少


我写的代码如下:
-------------------------------

create   table   #tb(id   int)
insert   #tb   values(2)
insert   #tb   values(3)
insert   #tb   values(4)
insert   #tb   values(5)
insert   #tb   values(6)
insert   #tb   values(7)
insert   #tb   values(8)
insert   #tb   values(9)

--求和组合
select   cast(a.id   as   char(1))+ '+ '+cast(b.id   as   char(1))+ '= '+cast(a.id+b.id   as   char(2))   as  
expression,a.id+b.id   as   result
,a.id   as   id1,b.id   as   id2
into   #amount
from   #tb   a,#tb   b
where   a.id <> b.id   and   a.id <b.id

--求积组合
select   cast(a.id   as   char(1))+ '* '+cast(b.id   as   char(1))+ '= '+cast(a.id*b.id   as   char(2))   as  
expression,a.id*b.id   as   result
,a.id   as   id1,b.id   as   id2
into   #multiply
from   #tb   a,#tb   b
where   a.id <> b.id   and   a.id <b.id

--甲说:我猜不出---------------------------------------------
--删除求和表中两数相加的和只出现过一次的记录
delete   a
from   #amount   a  
where   not   exists(select   1   from   #amount   where   result=a.result   and   id1 <> a.id1   and   id2 <> a.id2)

--删除求积表中和中不存在的数据(可不要)
--delete   a  
--from   #multiply   a
--where   not   exists(select   1   from   #amount   where   id1=a.id1   and   id2=a.id2)

--乙说:我猜不出---------------------------------------------
--删除求积表中两数相乘的积只出现过一次的记录
delete   a
from   #multiply   a
where   not   exists(select   1   from   #multiply   where   result=a.result   and   id1 <> a.id1   and   id2 <> a.id2)

--删除求和表中和中不存在的数据(可不要)
--delete   a  
--from   #amount   a
--where   not   exists(select   1   from   #multiply   where   id1=a.id1   and   id2=a.id2)
 
--甲说:我猜到了---------------------------------------------
--删除求和表中两数相加的和出现过一次以上的记录
delete   #amount
where   result   in  
( select   a.result
from   #amount   a,#multiply   b
where   a.id1=b.id1   and   a.id2=b.id2
group   by   a.result   having   count(*)> 1)

--删除求积表中和中不存在的数据(可不要)
--delete   a  
--from   #multiply   a
--where   not   exists(select   1   from   #amount   where   id1=a.id1   and   id2=a.id2)

--乙说:我也猜到了---------------------------------------------
--删除求积表中两数相加的和出现过一次以上的记录
delete   #multiply
where   result   in  
( select   b.result
from   #amount   a,#multiply   b
where   a.id1=b.id1   and   a.id2=b.id2
group   by   b.result   having   count(*)> 1)

--删除求和表中和中不存在的数据(可不要)
--delete   a  
--from   #amount   a