在一个数组中已知一个数,找到所有相加(可能是2个相加,3个相加或是四个相加)等于这个数的index c语言实现
时间: 2023-06-19 10:07:50 浏览: 96
C语言实现多项式的相加
以下是一个简单的C语言实现,它可以找到所有相加等于给定数字的组合:
```c
#include <stdio.h>
#define MAX_SIZE 100
void find_sum(int arr[], int start, int end, int sum, int count, int result[], int *res_count);
int main() {
int arr[MAX_SIZE], n, sum, result[MAX_SIZE], res_count = 0, i, j;
printf("Enter the size of the array: ");
scanf("%d", &n);
printf("Enter the elements of the array: ");
for(i=0; i<n; i++) {
scanf("%d", &arr[i]);
}
printf("Enter the sum to be found: ");
scanf("%d", &sum);
for(i=2; i<=4; i++) {
find_sum(arr, 0, n-1, sum, i, result, &res_count);
}
printf("All combinations that add up to %d are:\n", sum);
for(i=0; i<res_count; i+=4) {
printf("%d: ", i/4+1);
for(j=0; j<4 && i+j<res_count; j++) {
printf("%d ", result[i+j]);
}
printf("\n");
}
return 0;
}
void find_sum(int arr[], int start, int end, int sum, int count, int result[], int *res_count) {
int i, j;
if(count == 0 && sum == 0) {
for(i=*res_count, j=0; j<4; j++, i++) {
result[i] = arr[start+j];
}
*res_count += 4;
return;
}
if(count == 0 || start > end) {
return;
}
for(i=start; i<=end; i++) {
result[*res_count+count-1] = arr[i];
find_sum(arr, i+1, end, sum-arr[i], count-1, result, res_count);
}
}
```
该程序首先从用户输入中读取数组,大小和要查找的总和。然后,它通过调用 `find_sum` 函数来查找所有相加等于给定数字的组合。该函数采用递归算法,为每个元素尝试所有可能的组合。如果找到了一个相加等于总和的组合,它将其存储在 `result` 数组中。最后,程序输出所有找到的组合。
阅读全文