🎯 神奇的二分法
课后小测 · 共8题
趣味C++课后练习
⚠️ 本次练习已提交,答案已锁定。如需重新练习请联系老师。
🎉 答题完成!
0
📋 一键复制做题报告
📊 知识点掌握情况
第1题
单选题
二分法思想
二分法的核心思想是什么?
A. 从1开始逐个试,直到猜对
B. 每次取中间值,根据反馈把搜索范围缩小一半
C. 随机猜,碰运气
D. 从大到小依次猜
正确答案:
B
二分法的核心就是"分而治之"——每次取当前范围的中间值,根据反馈(大了/小了)判断目标在左半区间还是右半区间,从而把搜索范围直接缩小一半。重复这个过程就能快速找到目标。
第2题
单选题
二分法思想
在1-1000范围内用二分法猜数字,最多需要猜几次?
A. 10次
B. 100次
C. 1000次
D. 500次
正确答案:
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 的作用是什么?
A. 计算左边界
B. 计算右边界
C. 取当前区间的中间值作为猜测值
D. 计算区间长度
正确答案:
C
mid是middle(中间)的缩写,(left+right)/2就是取左边界和右边界的平均值,即当前区间的正中间值。二分法每次都猜中间值,这样无论反馈是"大了"还是"小了",都能把范围缩小一半。整数除法会自动向下取整,对结果没有影响。
第4题
单选题(中)
综合应用
如果用户反馈"猜小了",应该怎么更新边界?
A. left = mid
B. left = mid + 1
C. right = mid
D. right = mid - 1
正确答案:
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) 是什么类型的循环?
A. 有限循环,执行固定次数
B. 无限循环,条件永远为真,需要break才能跳出
C. 不执行的循环
D. 只执行一次的循环
正确答案:
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是二分法边界更新的关键细节。
提交答案