题目:输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。如果有多对数字的和等于输入的数字,输出任意一对即可。例如输入数组 $[1, 2, 4, 7, 11, 15]$ 和数字 $15$。由于 $4+11=15$,因此输出 $4$ 和 $11$。用C语言实现
时间: 2024-02-13 21:07:36 浏览: 18
以下是使用双指针法实现的C语言代码:
```c
#include <stdio.h>
void findSum(int arr[], int len, int target) {
int left = 0, right = len - 1;
while (left < right) {
int sum = arr[left] + arr[right];
if (sum == target) {
printf("%d %d\n", arr[left], arr[right]);
return;
} else if (sum < target) {
left++;
} else {
right--;
}
}
printf("No such pair found.\n");
}
int main() {
int arr[] = {1, 2, 4, 7, 11, 15};
int len = sizeof(arr) / sizeof(arr[0]);
int target = 15;
findSum(arr, len, target);
return 0;
}
```
输出结果为:
```
4 11
```
相关问题
题目:输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。如果有多对数字的和等于输入的数字,输出任意一对即可。 C语言做
以下是C语言的代码实现:
```c
#include <stdio.h>
void findSum(int arr[], int n, int sum) {
int i = 0; // 左指针
int j = n - 1; // 右指针
while (i < j) {
int curSum = arr[i] + arr[j];
if (curSum == sum) {
printf("找到一对数: %d 和 %d\n", arr[i], arr[j]);
return; // 找到一组就退出
} else if (curSum < sum) { // 当前和小于sum,左指针右移
i++;
} else { // 当前和大于sum,右指针左移
j--;
}
}
printf("没有找到符合条件的数对\n"); // 找不到就输出没有找到
}
int main() {
int arr[] = {1, 2, 4, 7, 11, 15};
int sum = 15;
int n = sizeof(arr) / sizeof(arr[0]);
findSum(arr, n, sum);
return 0;
}
```
输出结果为:
```
找到一对数: 4 和 11
```
本题目要求运用二分查找法在数组R(已升序排序)中查找k值,输出其位置pos(即数组下标,从0开始),如果找不到,则输出-1。
好的,我明白了。针对您的问题,我可以给出以下代码实现:
```python
def binary_search(R, k):
left = 0
right = len(R) - 1
while left <= right:
mid = (left + right) // 2
if R[mid] == k:
return mid
elif R[mid] < k:
left = mid + 1
else:
right = mid - 1
return -1
```
这个函数接受两个参数,一个已经按照升序排好序的数组R,和需要查找的元素k。它会记录数组的左右两个端点,并通过二分查找的方式逐步缩小搜索范围,最终返回查找到的元素在数组中的下标pos,或者-1表示没有找到。