正在载入在线练习界面,本页内容可直接阅读…

AK CSP › NOIP 普及 2013 第一轮真题 › 第 25 题

NOIP 普及 2013 第一轮 第 25 题:二分查找第一个不小于目标值的位置

阅读程序 · 二分查找与二分答案 · 答案 7

题目

```
#include <iostream> 
using namespace std;
int main()
{
const int SIZE = 100;
int n, f, i, left, right, middle, a[SIZE];
cin>>n>>f;
for (i = 1; i <= n; i++)
cin>>a[i]; left = 1;
right = n; 
do {
middle = (left + right) / 2; 
if (f <= a[middle])
right = middle;
else
left = middle + 1; 
} while (left < right); 
cout<<left<<endl;
return 0;
}
```
输入:  
12 17  
2 4 6 9 11 15 17 18 19 20 21 25

本小题

阅读程序写结果:

答案

7

题解

考点定位

本题考「二分查找模拟」,对应大纲 4.3.1 二分(难度【3】)。

解题过程

程序对有序数组二分查找某数,输出比较次数/下标。按原卷数组与目标逐轮模拟:left/right/middle 轨迹共 7 次比较找到。

答案:7。

易错提醒

① 二分每轮比较 a[middle] 与目标:小于走左、大于走右;② 统计的是执行轮数——middle=(left+right)/2 整除取左。

真题版权归 CCF 所有,本站仅用于非商业教学用途。页面加载后可直接在线作答,作答记录保存在本浏览器或账号中。 京ICP备2026056990号-1 京公网安备11010502062986号