二分查找,必须有序 已知一有序数组 a[] = {50, 51, 52, 53, 54, 55, 56, 57, 58, 59},输入一个数n,如果数组中有,则输出是第几个,如果没有则输出0 样例:输入:54 输出: 5 输入:59 输出:10 输入60: 输出:0
时间: 2024-01-16 21:05:46 浏览: 33
好的,这道题目可以使用二分查找算法来解决。以下是Python实现的代码:
```python
def binary_search(arr, n):
"""
在有序数组 arr 中查找元素 n,返回其下标。若不存在,则返回 -1。
"""
left, right = 0, len(arr) - 1
while left <= right:
mid = (left + right) // 2
if arr[mid] == n:
return mid
elif arr[mid] < n:
left = mid + 1
else:
right = mid - 1
return -1
a = [50, 51, 52, 53, 54, 55, 56, 57, 58, 59]
n = int(input("请输入要查找的数:"))
pos = binary_search(a, n)
if pos == -1:
print("0")
else:
print(pos+1)
```
运行结果如下:
```
请输入要查找的数:54
5
```
```
请输入要查找的数:59
10
```
```
请输入要查找的数:60
0
```
相关问题
如果数组a等于x+y,让数组b=x,数组c=y
好的,这是一个将数组a拆分成数组b和数组c的问题。可以通过遍历数组a,将其每个元素按照一定规则分别放入数组b和数组c中,实现拆分。
具体而言,可以通过以下代码实现:
```
for i in range(len(a)):
if i < len(x):
b.append(a[i])
else:
c.append(a[i])
```
这里假设数组x和数组y的长度已知,并且与数组a的长度相等。通过遍历数组a,将前len(x)个元素放入数组b中,将后面的元素放入数组c中,即可完成数组a的拆分。
已知int a[10]={1,3,5,8,10,21,33,46,57};,输入一个整数x插入数组a后,使之仍然有序,并输出a数组中所有元素。
这道题的意思是已知一个整数数组a,然后输入一个整数x插入到数组a后,使得数组仍然有序,然后输出数组a中所有的素数。
解题思路是先找到x应该插入到数组a中的位置,然后将x插入到数组a中,并且保持数组a有序性。最后遍历一遍数组a,检查每个数是否为素数,并且输出所有素数。
代码实现如下:
```python
# 定义整数数组a
a = [1, 3, 5, 8, 10, 21, 33, 46, 57]
# 输入一个整数x插入到数组a中
x = int(input("请输入一个整数x插入到数组a中: "))
# 找到x应该插入到数组a中的位置
for i in range(len(a)):
if x < a[i]:
a.insert(i, x)
break
else:
a.append(x)
# 遍历数组a,输出所有素数
for num in a:
if num > 1:
for i in range(2, num):
if num % i == 0:
break
else:
print(num)
```
注意,在Python中,`\xef\xbc\x8c`表示“,”,`\xe3\x80\x82`表示“。”,所以需要先将这些转义字符转换为对应的中文字符。