搜索n个二维数组

时间:2011-04-26 05:34:04

标签: c multidimensional-array

您好 我需要在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 ;

2 个答案:

答案 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);