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]

必要な解決策は、最初の配列は参照配列と見なされ、次の配列のセットは最初の配列 (参照) に関してチェックされることです。要件は、2 番目の配列が最初の配列に関して共通の要素を持たないことです。次のチェックに進みます。3 番目の配列は、最初の配列と共通の要素を持つべきではありません。

 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.

入力を2次元配列に格納してこれを試しましたが、めちゃくちゃになりました。あなたのアルゴリズム/コードでこれを計算する方法を教えてください。

4

2 に答える 2

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 に答える
0

質問には、配列の長さが定数ではないことが記載されているため、静的な 2 次元配列の考え方は機能しない可能性があります。DMA(mallocおよびcalloc関数)を使用して2次元配列を作成できます

参照配列の各要素を他の配列と比較する単純なアルゴリズムを好むことができます。

于 2013-02-06T14:03:30.743 に答える