将第一个二分法和第二个等差递增法结合起来,就可以更加高效地得到正确答案!
首先,用二分法将数据两份,确定一个大致范围。
如果死了,就证明正确答案在10~54之间;如果没死,就证明正确答案在55~100之间。
由于二者等价,所以这里就拿前一种情况举例子。
确定了这样一个范围后,就沿用方法二的思路,从低到高递增,也就是20、30、40……
在这种情况下,哪怕遇到极端情况,也就是正确答案为48~49(即玩家在49层死亡),也只需要尝试:
54—1次。
20,30,40,50—4次。
41,42,43,44,45,46,47,48,49—9次。
总共:1+4+9=14次。
相比于之前的17次,14次显然已经在这个基础上有了很大提升。这样一来,玩家也不需要那么频繁地奔跑,也就是赶路过程不会再耗费过多时间。
显然,如果采用这个办法,哪怕遇到了最麻烦的情况,只要手脚足够麻利,应该也能卡点或者接近卡点地成功存活、通关游戏。
对于大部分玩家而言,想到这一层差不多也就是极限了。
毕竟时间不等人,必须要尽快行动起来。
如果还要贪图最后的奖励、再多磨蹭一会儿的话,搞不好连这个办法都行不通了。
然而,也就在考虑到这个办法的同时,林朔和屏幕前最最聪明的你想到了一个与这种解决方案相似、却又更加特殊、更加巧妙的办法!
如果要用一句话来形容这个方法,那便是:
逐级递增,等差递减。
第一步,和方案三一致,同样是通过二分法先确定一次范围。
但第二步,却有所不同。
在方案三中,选择的破题方式为每间隔10个数就进行一次测试,但在林朔所选择的方案四中,这个间隔数却随时发生着改变:
19,27,24,40,45,49,52
也就是说,第一次选择的间隔为9(10+9),第二次选择的间隔为8(19+8),第三次选择的间隔为7(27+7)……以此类推,每往上走一步,间隔数字就减少一个。
让我们来看看这样做的好处。
假设在19的时候死了,接下来就需要挨个尝试10~19之间的房间,最坏情况下需要尝试11,12,13,14,15,16,17,18,一共8次,加上先前的54,19,一共8+2=10次,解决问题。
假设在27的时候死了,接下来就需要挨个尝试19~27之间的房间,最坏情况下需要尝试20,21,22,23,24,25,26,一共7次。加上先前的54,19和27,一共7+3=10次,解决问题。
……
假设在52的时候还没死,那么直接可以确定答案为53~54。总共尝试次数为:54,19,27,34,40,45,49,52,一共只需8次。
发现了吗?
没错,用这种方法,不管正确答案位于哪个区间,哪怕是最坏情况,最多也只需要花费10次就能解决问题!
目前还剩下10分钟,哪怕真的遇到最坏情况,平均1分钟也只需要开一扇门,时间绝对足够,甚至绰绰有余!
(明后两天都加班估计五点多就要起床会很忙。更新尽量更,就是可能晚点发,见谅)