帮我编写一个程序:有10个数,按由大到小的顺序存放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中的第几个数。如果该数不在数组中,则打印出"无此数"
时间: 2024-05-09 21:18:10 浏览: 85
好的,这是一个计算机编程的问题。下面是代码示例:
```python
def binary_search(arr, x):
low = 0
high = len(arr) - 1
while low <= high:
mid = (low + high) // 2
if arr[mid] == x:
return mid + 1
elif arr[mid] < x:
high = mid - 1
else:
low = mid + 1
return "无此数"
arr = [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
arr.sort(reverse=True) # 从大到小排序
x = int(input("请输入一个数:"))
result = binary_search(arr, x)
print(result)
```
输入一个数后,程序会输出该数在数组中的位置。如果该数不在数组中,则会输出"无此数"。
相关问题
用C语言编写一个程序:有15个数按由大到小顺序存放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中第几个元素的值。如果该数不在数组中,则输出“无此数”。
在C语言中,你可以使用折半查找(Binary Search)算法来实现这个功能。以下是对应的代码示例:
```c
#include <stdio.h>
// 折半查找函数
int binarySearch(int arr[], int low, int high, int target) {
while (low <= high) {
int mid = low + (high - low) / 2;
if (arr[mid] == target)
return mid; // 找到了目标,返回其索引
if (arr[mid] < target)
low = mid + 1; // 目标在右侧,缩小搜索范围
else
high = mid - 1; // 目标在左侧,缩小搜索范围
}
return -1; // 数字不存在于数组中
}
int main() {
int arr[] = {15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1};
int size = sizeof(arr) / sizeof(arr[0]);
int target;
int index;
printf("请输入一个数字:");
scanf("%d", &target);
index = binarySearch(arr, 0, size - 1, target);
if (index != -1)
printf("该数在数组中的位置是 %d\n", index + 1);
else
printf("无此数。\n");
return 0;
}
```
当用户输入一个数字后,`binarySearch` 函数会在排序好的数组中搜索目标数。如果找到了,返回它的索引;如果没有找到,返回 `-1` 表示该数不在数组中。
用C语言写程序:+有15个数按由大到小顺序存放在一个数组中,输入一个数,要求用
根据提供的引用内容,以下是用C语言编写的折半查找法程序:
```c
#include <stdio.h>
int binarySearch(int arr[], int left, int right, int x) {
while (left <= right) {
int mid = left + (right - left) / 2;
if (arr[mid] == x)
return mid;
if (arr[mid] < x)
right = mid - 1;
else
left = mid + 1;
}
return -1;
}
int main() {
int arr[] = {15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1};
int n = sizeof(arr) / sizeof(arr[0]);
int x;
printf("请输入要查找的数:");
scanf("%d", &x);
int result = binarySearch(arr, 0, n - 1, x);
if (result == -1)
printf("无此数\n");
else
printf("该数是数组中第%d个元素的值\n", result + 1);
return 0;
}
```
阅读全文