输入n(n<100)的值,以及n个从小到大排序的整数序列,再输入一个待查找的整数m,使用二分法进行查找该数的序号。 编程要求 输入:第一行为整数 n,第二行包括 n个整数,以空格分隔,第三行为整数 m。 输出:如果能够在序列中找到整数 m,则输出其编号(编号从1开始,如果存在多个编号,则返回编号最小的),否则输出 None。
时间: 2023-12-24 18:04:13 浏览: 64
好的,这是一个简单的二分查找问题,我可以帮您编写代码解决这个问题。由于您没有说明您使用的编程语言,我将使用 Python 作为示例。
以下是代码实现:
```python
n = int(input())
arr = list(map(int, input().split()))
m = int(input())
left, right = 0, n-1
while left <= right:
mid = (left + right) // 2
if arr[mid] == m:
while mid > 0 and arr[mid-1] == m:
mid -= 1
print(mid+1)
break
elif arr[mid] < m:
left = mid + 1
else:
right = mid - 1
else:
print("None")
```
代码说明:
- 首先读取输入的 n、整数序列 arr 和待查找的整数 m。
- 然后定义左右两个指针 left 和 right,初始值分别为序列的第一个和最后一个元素的下标。
- 在循环中,每次计算中间元素的下标 mid,并将其与 m 进行比较。
- 如果 mid 对应的元素等于 m,则循环查找左侧相同的元素,直到找到最小的下标,然后输出该下标加一(因为编号从 1 开始)。
- 如果 mid 对应的元素小于 m,则说明要查找的元素在 mid 右侧,将 left 调整为 mid+1。
- 如果 mid 对应的元素大于 m,则说明要查找的元素在 mid 左侧,将 right 调整为 mid-1。
- 如果循环结束仍然没有找到元素,则输出 "None"。
希望这个代码可以帮助到您。
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![java](https://img-home.csdnimg.cn/images/20210720083646.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![cpp](https://img-home.csdnimg.cn/images/20210720083646.png)
![py](https://img-home.csdnimg.cn/images/20210720083646.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)