0

考虑我是否有一个输入,其中作为输入的数组数量不固定,每个数组中的元素数量也不固定。所以每次我的输入不同时,

 Example 1: 1st input

 1st array= [2,3,4]
 2nd array =[6,7,8,9]
 3rd array=[5,3,12]

 Example 2: 2nd input

 1st array= [6,3,4,8]
 2nd array =[6,7,4,9]
 3rd array=[1,2,12]
 4th array= [20,21,22,23,25]

所需的解决方案是,第一个数组被视为参考数组,下一组数组将针对第一个数组(参考)进行检查,要求第二个数组不应与第一个数组有共同元素,并且它继续进行下一次检查,第三个数组不应该与第一个数组有共同的元素。

 from 1st Example 

 1st array= [2,3,4] -- reference array
 1st array= [2,3,4] is compared to 2nd array =[6,7,8,9] 
 1st array= [2,3,4] is compared to  3rd array=[5,3,12]

 solution needed:
 + print 1st array( reference array)
 + if no common elements found between 1st array and 2nd array, from ex. no common elements found, so print out the 2nd array.
 + same for 3rd array, from ex. there is common element(3 is present in both first and third array), so dont print.

我已经尝试过将输入存储在二维数组中,但我搞砸了。请指导我使用您的算法/代码进行计算。

4

2 回答 2

0

由于问题指出数组的长度不是常数,因此静态二维数组的想法可能行不通。您可以使用 DMA(malloc 和 calloc 函数)创建二维数组

您可以更喜欢直接的算法,将参考数组中的每个元素与其他数组进行比较。

于 2013-02-06T14:03:30.743 回答
0

请注意我如何必须创建一个数组来包含各种数组的长度,以及一个参数来说明该数组的长度。

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

void print_array(int *a, int size) {
    int i;
    for (i = 0; i<size; i++) {
        printf("%d ", a[i]);
    }

    printf("\n");
}


bool is_in(int *a, int size, int elem) {
    int i;
    for (i=0; i<size; i++) {
        if (a[i] == elem) {
            return true;
        }
    }
    return false;
}

void f(int **a, int a_siz, int* sizes) {
    print_array(a[0],sizes[0]);

    for (int i=1; i< a_siz; i++) {
        bool common_element = false;

        for (int k=0; k< sizes[i]; k++) {
            if (is_in(a[0],sizes[0],a[i][k])) {
                common_element = true;
                break;
            }
        }

        if (! common_element) {
            print_array(a[i],sizes[i]);
        }
    }

}



int main() {
    int s = 3;
    int sizes[] = {3,4,3};
    int **a = malloc(sizeof(int*)*3);
    for (int i=0; i<s; i++) {
        a[i] = malloc(sizeof(int*)*sizes[i]);
    }

    a[0][0] = 2;
    a[0][1] = 3;
    a[0][2] = 4;

    a[1][0] = 4;
    a[1][1] = 7;
    a[1][2] = 8;
    a[1][3] = 9;

    a[2][0] = 5;
    a[2][1] = 44;
    a[2][2] = 12;

    f(a,s,&sizes);
}
于 2013-02-06T14:37:05.663 回答