定义一个整型数组array和一个整数target,找出(输出)数组array中两个数的和与乘为target的所有组合。c语言
时间: 2024-10-06 17:06:07 浏览: 42
两数之和:在该数组中找出和为目标值的那两个整数,并返回他们的数组下标
在C语言中,要找到一个整型数组`array`中两个数的和等于目标值`target`的所有组合,你可以采用哈希表(如映射或字典)的方法来优化搜索过程,避免重复计算。这里是一个简单的示例程序:
```c
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#define ARRAY_SIZE 10 // 假设数组长度
bool found_combination(int array[], int target, int* start, int* end, bool visited[], int hash[ARRAY_SIZE]) {
if (*start > *end)
return false;
for (int i = *start + 1; i <= *end; ++i) {
int current_sum = array[*start] + array[i];
if (current_sum == target && !visited[i])
printf("%d + %d = %d\n", array[*start], array[i], current_sum);
visited[i] = true;
if (found_combination(array, target, &start, &end, visited, hash))
return true;
visited[i] = false;
}
return false;
}
void find_pairs(int array[], int target) {
int n = sizeof(array) / sizeof(array[0]);
bool visited[n] = {false};
int hash[n] = {0}; // 初始化哈希表
for (int i = 0; i < n; ++i) {
hash[i] = target - array[i]; // 计算差值并存储在哈希表中
if (hash[i] >= 0 && !visited[hash[i]]) {
visited[hash[i]] = true;
found_combination(array, target, &i, &n - 1, visited, hash);
}
}
}
int main() {
int array[] = {2, 7, 11, 15, 6, 9}; // 示例数组
int target = 13; // 目标和
find_pairs(array, target);
return 0;
}
```
这个程序首先初始化一个哈希表`hash`用于存储每个元素的目标差值。然后遍历数组,对于每个元素,如果它的差值在哈希表中存在且未访问过,就从那个位置开始查找组合。如果找到匹配的和,就会打印出来。同时,它会递归地继续查找剩余部分,直到覆盖整个数组。
阅读全文