c编写代码给定数组和目标,求数字和为目标的全部组合
时间: 2024-10-25 09:04:53 浏览: 10
java代码-给出一组候选数\ C C 和一个目标数\ T T,找出候选数中起来和等于\ T T 的所有组合。 \ C C 中的每个数字在一个组合中只能使用一次
在C语言中,你可以使用回溯算法(backtracking)来解决这个问题,这种算法通常用于找所有可能的组合或排列。以下是一个简单的递归函数示例,它会找到给定数组中数字之和等于特定目标的所有组合:
```c
#include <stdio.h>
#include <stdlib.h>
// 这个函数会检查当前路径是否可以达到目标,并记录结果
void find_combinations(int arr[], int target, int start, int current_sum, int* result, int index) {
if (current_sum == target && index == result_size) {
// 如果已经到达目标并且结果数组已满,打印结果
for (int i = 0; i < index; ++i)
printf("%d ", result[i]);
printf("\n");
} else if (current_sum > target || start >= array_length) {
// 当前路径无法到达目标,结束递归
return;
} else {
// 添加当前元素到结果,并继续尝试其他元素
result[index] = arr[start];
find_combinations(arr, target, start + 1, current_sum + arr[start], result, index + 1);
// 回溯:移除当前元素以便尝试其他选择
result[index] = 0; // 或者 result[index++] = -1 (如果数组允许重复元素)
find_combinations(arr, target, start + 1, current_sum, result, index); // 不添加当前元素
}
}
int main() {
int arr[] = {1, 2, 3, 4, 5}; // 输入数组
int target = 9; // 目标值
const int array_length = sizeof(arr) / sizeof(arr[0]);
int result[array_length]; // 结果数组,假设不允许重复
int result_size = 0;
find_combinations(arr, target, 0, 0, result, 0);
return 0;
}
```
当你运行这个程序,它将输出所有和为目标9的数组元素组合,例如:1+2+6, 1+3+5等。
阅读全文