当前位置: 代码迷 >> Sql Server >> 一道有意思的考试题 - 怎么找出那个苹果
  详细解决方案

一道有意思的考试题 - 怎么找出那个苹果

热度:42   发布时间:2016-04-27 12:53:28.0
一道有意思的考试题 ------ 如何找出那个苹果?
有12苹果,其中有1个与其余的11个都不同,或者比它们重,或者比他们轻。现在给出一个没有砝码的天平,要求称量3次找

出这个苹果,并且判断其轻重情况!

------解决方案--------------------
用二分法来称
------解决方案--------------------

------解决方案--------------------
探讨

用二分法来称

------解决方案--------------------

------解决方案--------------------
3分来做。
------解决方案--------------------

------解决方案--------------------
不知道这个是轻是重的话3次分不出来


------解决方案--------------------
想了下,就算是用二分法也没法3次之内确定是哪个苹果的(除非运气好)~!~!~!
例如:
第一次 6V6
第二次 3V3
第三次 1V1 到这又分三种情况的 
假如剩余三个苹果分别编号 1 2 3 ,其中只有一个重量不同
则除非运气好,直接1V1的时候就是两个重量一样的苹果,那么剩下的那个就是你要的。
如果1V1的时候,不是2个重量一样的苹果,三次根本就找不出来的,而且你的苹果的重量还不知道是轻还是重的


------解决方案--------------------
不好意思,昨天想了下,二分法不行,走不同!挺有难度的,希望楼主能公布结果哈
------解决方案--------------------
不知道轻还是重,三次称不出来哈,等大牛
------解决方案--------------------
4 4 4

2 2 

1 1

------解决方案--------------------
探讨

不知道这个是轻是重的话3次分不出来

------解决方案--------------------
偶又思考了下,结果如下:
把苹果编为1-12号
第一次称,(1,2,3,4)vs(5,6,7,8)
【平,不一样的在9,10,11,12里;(9.10)vs(1,2),平,在11,12里,不平, 在 9,10里,接下来不用我说了吧】
如果第一次称不平,不一样的在1,2,3,4,5,6,7,8里,假设天平偏向1,2,3,4, 即1,2,3,4比5,6,7,8重
第二次称(2,3,4,5)VS(1,9,10,11)
【平,不一样的为6,7,8且不一样的苹果轻
偏向2,3,4,5,不一样的在2,3,4中,且不一样的苹果重
偏向1,9,10,11,不一样的在1,5中】
第三次称量
【不一样的在6,7,8中,6vs7称次,哪个轻就哪个,平就是8,下面同理】
------解决方案--------------------
三次的话,还不止轻重,运气的成分大一点
------解决方案--------------------
http://zhidao.baidu.com/question/121427515.html
------解决方案--------------------
说说15楼的还是不行。

就拿最后一步来说
6vs7称次,哪个轻就哪个,因为苹果不知道是轻是重 ,所以即使不一样的话,依然无法分辨出是哪个苹果,除非两个相等,才能判断出是另外一品国
------解决方案--------------------
SQL code
if object_id('tempdb..#t') is not null    drop table #tcreate table #t(ID int identity(1,1) primary key,AppleName nvarchar(20),Weight decimal(6,2))insert into #t(AppleName,Weight)select '苹果A',12.5 union all select '苹果B',12.5 union all select '苹果C',12.5 union all select '苹果D',12.5 union all select '苹果E',12.5 union all select '苹果F',12.5 union all select '苹果G',12.5 union all select '苹果H',12.5 union all select '苹果I',12.5 union all select '苹果J',12.5 union all select '苹果K',11.5 union all select '苹果L',12.5select * from #tdeclare @searchApple int                --待寻找的苹果IDdeclare @appleIsWeight bit                --苹果是较重还是较轻declare @errorMessage nvarchar(100)        --分配的苹果与命题中的有差异产生的错误信息set @errorMessage=''declare @weightFirst int,    --第一次分组,0表示Group1和Group2等重,1表示Group1>Group2,2表示Group1<Group2@weightSecond int,    --第二次分组,0表示Group1和Group2等重,1表示Group1>Group2,2表示Group1<Group2@weightThird int    --第三次分组,0表示Group1和Group2等重,1表示Group1>Group2,2表示Group1<Group2declare @weightA decimal(6,2),@weightB decimal(6,2)--进行第一次称重,Group1(1,2,3,4),Group2(4,5,6,7)select @weightA=sum(Weight) from #t where ID > 0 and ID <= 4select @weightB=sum(Weight) from #t where ID > 4 and ID <= 8if @[email protected]    set @weightFirst=0else if @weightA>@weightB    set @weightFirst=1else     set @weightFirst=2--第二次称重----如果第一次天枰平衡,则在剩下的两个里面筛选(比较方式:拿一个和1-8中任意一个比较)if @weightFirst=0begin    select @weightA=Weight from #t where ID = 1     select @weightB=Weight from #t where ID = 11    if @weightA>@weightB    begin        select @searchApple=11,@appleIsWeight=0    end    else if @weightA<@weightB    begin        select @searchApple=11,@appleIsWeight=1    end    --如果苹果11也排除在外,则要进行第三次称重    else    begin                 select @weightA=Weight from #t where ID = 1         select @weightB=Weight from #t where ID = 12        if @weightA>@weightB        begin            select @searchApple=12,@appleIsWeight=0        end        else if @weightA<@weightB            select @searchApple=12,@appleIsWeight=1        else            set @errorMessage=N'苹果重量不如命题中所述'    endend----如果第一次天枰不平衡,前8个里面进行筛选elsebegin    --Group1(2,3,5),Group2(4,6,7)    select @weightA=sum(Weight) from #t where ID in (2,3,5)    select @weightB=sum(Weight) from #t where ID in (4,6,7)    ----重量相等,则苹果只能是1和8中间的一个    if @[email protected]    begin        --第三次称重        select @weightA=Weight from #t where ID = 1         select @weightB=Weight from #t where ID = 11        if @weightA<>@weightB        begin            --回顾第一次称重结果            if @weightFirst=1                select @searchApple=1,@appleIsWeight=1            else if @weightFirst=2                select @searchApple=1,@appleIsWeight=0            else                set @errorMessage=N'苹果重量不如命题中所述'        end        else        begin            --回顾第一次称重结果            if @weightFirst=1                select @searchApple=8,@appleIsWeight=0            else if @weightFirst=2                select @searchApple=8,@appleIsWeight=1            else                set @errorMessage=N'苹果重量不如命题中所述'        end    end    ----重量不相等,则要从刚刚称过的Group1(2,3,5),Group2(4,6,7)中筛选了    else    begin        if @weightA>@weightB            set @weightSecond=1        else            set @weightSecond=2        --如果交换5,4后,重量颠倒,则在5和4中筛选        if @weightFirst<>@weightSecond        begin            --第三次称重            select @weightA=Weight from #t where ID = 5            select @weightB=Weight from #t where ID = 11            ----如果是5            if @weightA<>@weightB            begin                --回顾第一次称重结果                if @weightFirst=1                    select @searchApple=5,@appleIsWeight=0                else if @weightFirst=2                    select @searchApple=5,@appleIsWeight=1                else                    set @errorMessage=N'苹果重量不如命题中所述'            end            ----如果是4            else            begin                --回顾第一次称重结果                if @weightFirst=1                    select @searchApple=4,@appleIsWeight=1                else if @weightFirst=2                    select @searchApple=4,@appleIsWeight=0                else                    set @errorMessage=N'苹果重量不如命题中所述'            end        end        --5和4被排除,则把7拿出来,放入一个已知的苹果1,进行第三次称重,Group1(2,6),Group1(3,1)        else        begin            select @weightA=sum(Weight) from #t where ID in (2,6)            select @weightB=sum(Weight) from #t where ID in (3,1)            --天枰平衡,说明7有问题            if @[email protected]            begin                --回顾第一次称重结果                if @weightFirst=1                    select @searchApple=7,@appleIsWeight=0                else if @weightFirst=2                    select @searchApple=7,@appleIsWeight=1                else                    set @errorMessage=N'苹果重量不如命题中所述'            end            --天枰不平衡,在2,6,3中作筛选            else            begin                if @weightA>@weightB                    set @weightThird=1                else                    set @weightThird=2                ----天枰的偏向三次均未发生改变,说明2有问题                if @[email protected] and @[email protected]                begin                    --回顾第一次称重结果                    if @weightFirst=1                        select @searchApple=2,@appleIsWeight=1                    else if @weightFirst=2                        select @searchApple=2,@appleIsWeight=0                    else                        set @errorMessage=N'苹果重量不如命题中所述'                end                ----天枰的第三次偏向发生改变,说明6有问题                else if @[email protected] and @weightFirst<>@weightThird                begin                    --回顾第一次称重结果                    if @weightFirst=1                        select @searchApple=6,@appleIsWeight=0                    else if @weightFirst=2                        select @searchApple=6,@appleIsWeight=1                    else                        set @errorMessage=N'苹果重量不如命题中所述'                end                ----否则,只剩下3了                else                begin                    --回顾第一次称重结果                    if @weightFirst=1                        select @searchApple=3,@appleIsWeight=1                    else if @weightFirst=2                        select @searchApple=3,@appleIsWeight=0                    else                        set @errorMessage=N'苹果重量不如命题中所述'                end            end        end    endendselect AppleName,case @appleIsWeight when 1 then '偏重' when 0 then '偏轻' else '' end as WeightStatus from #t where [email protected]/*结果:苹果K    偏轻*/
  相关解决方案