一道有意思的考试题 ------ 如何找出那个苹果?
有12苹果,其中有1个与其余的11个都不同,或者比它们重,或者比他们轻。现在给出一个没有砝码的天平,要求称量3次找
出这个苹果,并且判断其轻重情况!
[解决办法]
用二分法来称
[解决办法]
[解决办法]
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 @weightA=@weightB 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 @weightA=@weightB 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 @weightA=@weightB 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 @weightFirst=@weightSecond and @weightFirst=@weightThird 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 @weightFirst=@weightSecond 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 ID=@searchApple/*结果:苹果K 偏轻*/
[解决办法]
求给分,以下正解:
苹果编号1-12,假设:3号苹果重300g,较轻;其余苹果350g,等重
第一次:分为两组称量,1-6 VS 7-12,选出天平向上的一方,即1-6组;
第二次:分为三组,1-2,3-4以及5-6,称量1-2 VS 3-4,5-6不称量,选出天平向上的一方,即3-4组;
(在本次称量中,若称量时天平持平,则说明较轻的苹果在未称量一组5-6。)
第三次:称量3 VS 4,选出选出天平向上的一方,即3。
[解决办法]
大大们原谅我,如果不知轻重,则需要4步:
苹果编号1-12
1-4 vs 5-8 第一次称量
1-4 vs 9-12 第二次称量
若都不平衡,则1-4特殊,(5-8)和(9-12)为标准重量,根据天平方向得出轻重结论
若平衡则排除平衡的两组,(1-4)为标准重量,剩下一组(4个),根据天平方向得出轻重结论
第三次称量,剩余一组4个苹果,两两称量,根据第一步得到的轻重结论,排除一组
第四次称量,一边一个苹果,根据第一步得到的轻重结论,排除一组
[解决办法]
[解决办法]