您好 我需要在n个数组(二维)上实现以下逻辑。这里我考虑过3个一维数组
#include<stdio.h>
main()
{
int a[4]={2,1,4,7},b[4]={3,-3,-8,0},c[4]={-1,-4,-7,6},sum,i,j,k,val=0;
for(i=0;i<4;i++) {
for(j=0;j<4;j++) {
for(k=0;k<4;k++) {
sum = a[i]+b[j]+c[k];
if(sum == val)
printf("%d %d %d\n", a[i], b[j], c[k]);
}
}
}
}
输出: 2 -8 6 ; 1 3 -4 ; 1 0 -1 ; 4 3 -7 ; 4 -3 -1 ; 4 0 -4 ; 7 -3 -4 ; 7 0 -7 ;
答案 0 :(得分:0)
请参阅C syntax in Wikipedia了解语法信息。
实际上,您需要使用int array [3] [4] = ...来创建一个包含3行和4列的数组。稍后在代码中用每个case的固定行索引替换对当前a,b和c数组的访问。
其余的实施留作练习,因为这听起来像是家庭作业。
答案 1 :(得分:0)
好问题:-)
我不会发布我的完整解决方案,因为问题似乎是家庭作业。只需几点......
我用递归解决了它:我使用的简化过程在target
数组中找到n
的总和与在{{中找到target - ONE_ELEMENT
的总和相同1}}数组。
使用3个阵列和零目标的示例
n-1
为了使它易于工作,我为数组创建了一个数据结构,并提出了一种在递归函数的几个调用之间传递信息的方法(我使用了在辅助递归设置函数中分配的另一个数组)。
阵列的结构是
find 3 elements with sum 0 in {2, 1, 4, 7}, {3, -3, -8, 0}, {-1, -4, -7, 6}
find 2 elements with sum 0 - 2 (-2) in {3, -3, -8, 0}, {-1, -4, -7, 6}
find 1 elements with sum -2 - 3 (-5) in {-1, -4, -7, 6} NOT FOUND
find 1 elements with sum -2 - -3 (1) in {-1, -4, -7, 6} NOT FOUND
find 1 elements with sum -2 - -8 (6) in {-1, -4, -7, 6} YAY! FOUND
...
和递归函数和辅助函数的原型是
struct sizedarray {
int *data;
size_t nelems;
};
编辑添加工作解决方案
findtarget(int target, struct sizedarray *arrays, size_t narrays);
findtarget_recursive(int target, struct sizedarray *arrays, size_t narrays, size_t level, int *saved);