🎯 神奇的二分法

课后小测 · 共8题

趣味C++课后练习
⚠️ 本次练习已提交,答案已锁定。如需重新练习请联系老师。
🎉 答题完成!
0
第1题 单选题 二分法思想
二分法的核心思想是什么?
正确答案:B
二分法的核心就是"分而治之"——每次取当前范围的中间值,根据反馈(大了/小了)判断目标在左半区间还是右半区间,从而把搜索范围直接缩小一半。重复这个过程就能快速找到目标。
第2题 单选题 二分法思想
在1-1000范围内用二分法猜数字,最多需要猜几次?
正确答案:A
每次猜测范围缩小一半,k次后范围大小为1000/2^k。当范围≤1时就找到了,即2^k ≥ 1000。因为2^9=512<1000,2^10=1024≥1000,所以最多需要10次。这就是二分法的威力——1000个数最多10次就能猜中!
第3题 单选题(中) 二分法思想
代码中 mid = (left + right) / 2 的作用是什么?
正确答案:C
mid是middle(中间)的缩写,(left+right)/2就是取左边界和右边界的平均值,即当前区间的正中间值。二分法每次都猜中间值,这样无论反馈是"大了"还是"小了",都能把范围缩小一半。整数除法会自动向下取整,对结果没有影响。
第4题 单选题(中) 综合应用
如果用户反馈"猜小了",应该怎么更新边界?
正确答案:B
"猜小了"说明目标数字比mid大,所以目标一定在右半区间(mid的右边)。左边界应该更新为mid+1,而不是mid——因为mid已经猜过了,而且确认比目标小,可以直接排除。如果写成left=mid,当left和right相邻时(如left=5,right=6),mid=5,猜5小了,left=mid=5,下一轮mid还是5,就会死循环!+1就是为了避免这种情况。
第5题 单选题(难) 循环结构
while(true) 是什么类型的循环?
正确答案:B
while(true)的条件永远为真,所以会一直执行循环体,是无限循环。必须在循环体内用break语句才能跳出。猜数字游戏正好适合用while(true)——因为不知道要猜几次,猜对了才用break结束。如果忘记写break,程序就会一直运行下去(死循环),需要手动终止。
第6题 判断题 二分法思想
二分法每次猜测后,搜索区间都会缩小一半。
正确答案:✅ 正确
正确!二分法每次猜中间值,如果"大了"就排除右半区间,如果"小了"就排除左半区间,无论哪种情况都排除了一半的可能性,所以区间大小每次都缩小一半。这就是二分法效率高的根本原因。
第7题 判断题(中) 二分法思想
反馈"猜小了"时,应该更新 right = mid - 1。
正确答案:❌ 错误
错误!"猜小了"说明目标比mid大,目标在右半区间,应该更新左边界 left = mid + 1。更新 right = mid - 1 是"猜大了"的时候的操作——目标比mid小,在左半区间,所以右边界移到mid-1。一定要分清楚方向:小了→往右找(left+1),大了→往左找(right-1)。
第8题 判断题(难) 二分法思想
left = mid + 1 中的 +1 是为了避免重复猜mid,也防止当left和right相邻时出现死循环。
正确答案:✅ 正确
正确!+1有两个重要作用:①mid已经猜过了,确认比目标小,可以直接排除,不需要再包含在范围内;②更关键的是防止死循环——假设left=5, right=6,如果写成left=mid,那么mid=(5+6)/2=5,猜5小了,left=mid=5,下一轮mid还是5,永远卡在5,程序死循环!写成left=mid+1=6,下一轮mid=6,就能继续推进了。所以+1/-1是二分法边界更新的关键细节。