Как объединить два массива без дубликатов? - PullRequest
0 голосов
/ 10 июня 2018

Я новичок.Я думаю, что главная проблема у меня с флагами.(Я не могу использовать команду прерывания, чтобы остановить петли).Пример:

A={1,2,3,4,5} B={1,2,3,6} 

Я должен создать новый массив с предыдущими без дубликатов.Итак: C = {1,2,3,4,5,6}.

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

#define M 5
#define N 4
int main() {

int A[M]={1,2,3,4,5};
int B[N]={1,2,3,6};
int U[M+N]; //M+N is the maximum size. it'll decrease with a counter.

int i=0, j=0,count=0,flag=0;

while(i<M){           //Array A is copied into Array U.
U[count]=A[i];
count++;        //counter that will determine the size.
i++;
}

i=0,j=0;  

while(i<M){     
    j=0;
    flag=0;
while(flag==1 || j<N){         //check if the flag is on or if the array is ended.
    if(B[j]!=A[i]){               // check if the element of the b array is different from
                                            //the element of array A (cause i already copied the array A)
        count++;                                //i make some space for the element to be copied.
        U[count]=B[j];            
    }
    else flag=1;                            //if the flag is on it means the element was equal, so i just
    j++;                                        //go to the next one
}       
i++;
}

for(i=0;i<count;i++)
printf(" %d ", U[i]);       //here i print, it prints the first 5 values from Array a correctly, for the other ones is a mess.

return 0;
}

Моя идея состоит в том, чтобы скопировать самый длинный массив (A) в новый (C), а затем отсканировать второй (B) и проверить каждое значение с каждым значением массива A. Еслизначение отличается (из всех значений в A) Я добавляю значение B в C, в противном случае я начинаю проверять следующее значение массива B со всеми значениями в A.

Ответы [ 2 ]

0 голосов
/ 11 июня 2018

Хорошо, я понял это после нескольких попыток.

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


#define F 5
#define S 4
#define L F+S

int main() {
    int A[F]={1,2,3,4,5};
    int B[S]={1,5,6,7};
    int U[L];

    int i=0,j=0,x=0, count=F, flag=1;

    printf("Primo vettore:\n");
    for(i=0;i<F;i++){     
        printf("%d ", A[i]);
    }

    printf("\n");

    printf("Secondo vettore:\n");
    for(i=0;i<S;i++){     
        printf("%d ", B[i]);
    }

    printf("\n");

    for(i=0;i<F;i++){     //i copy each element of array A to array B.
        U[i]=A[i];
    }

    for(i=0;i<S;i++){
        flag=1;
        x=0;
        for(j=0;flag==1 && j<F;j++){
            if(A[j]==B[i]){
            flag=0;
            }
        }
        if(flag==1){
            U[count]=B[i];
            count++;
        }
    }

    printf("Vettore generato:\n");
    for(i=0;i<count;i++)
    printf(" %d ", U[i]);


    return 0;
}

спасибо за помощь всем!

0 голосов
/ 10 июня 2018

Вы определяете массив A с размером M и массив B с размером N. Во вложенных циклах while вы проверяете i (индекс, используемый с массивом A) с N. Вы просто смешиваете размеры массива.

while(i<N){     
    j=0;
    flag=0;
    while(flag==1 || j<M){         
        if(B[j]!=A[i]){               
            count++;                               
            U[count]=B[j];            
        }
        else 
            flag=1;                            
        j++;                                        
    }   
i++;
}
...