У меня есть proplem в программе c, которые печатают пересечение двух входных массивов - PullRequest
0 голосов
/ 01 ноября 2019

В этом коде два входных массива (a и b). Он должен распечатать пересечение между двумя массивами (общие числа), но он напечатает только первое общее число. Например, a [1,2,3] и b [2,3,4] он печатает в массиве пересечений (I) только 2, а должно быть 2 и 3. (проблема в коде определяется комментарием).

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

int main()
{
int n,z ;
printf("Enter size of array\n");
scanf("%d",&n);
int a[n] ;
if(n<=20){
for(int i=0 ;i<n; i++){
    printf("Enter integer \n");
    scanf("%d", &a[i]);
}
}
for(int i=0 ;i<n; i++){
    printf("%d " ,a[i]);
}
printf("\nEnter size of the 2nd array\n");
scanf("%d",&z);
int b[z] ;
if(z<=20){
for(int i=0 ;i<z; i++){
    printf("Enter integer \n");
    scanf("%d", &b[i]);
}
}
for(int i=0 ;i<z; i++){
    printf("%d " ,b[i]);
}
for(int i=0 ; i<n ; i++){
    for(int j=i+1 ; j<n ; j++){
        if(a[i]==a[j]){
            for(int l = j; l < n; l++)
                {
                    a[l] = a[l + 1];
                }
                n--;
                j--;
            }
        }
    }
printf("\nArray1: ");
for(int i=0 ;i<n-1; i++){
    printf("%d, " ,a[i]);
}
printf("%d",b[n-1]);
for(int t=0 ; t<z ; t++){
    for(int u=t+1 ; u<z ; u++){
        if(b[t]==b[u]){
            for(int l = u; l < z; l++)
                {
                    b[l] = b[l + 1];
                }
                z--;
                u--;
            }
        }
    }
printf("\nArray2: ");
for(int e=0 ;e<z-1; e++){
    printf("%d, " ,b[e]);
}
printf("%d" ,b[z-1]);
int u[n+z] ; //union

for(int i=0;i<n;i++){
    u[i]=a[i];


}
for(int i=n ; i<(n+z)  ;i++){
    u[i]=b[i-n];
}
for(int i=0 ; i< n+z ; i++){ //remove repeated values from union
    for(int j=i+1 ; j< n+z ; j++){
        if(u[i]==u[j]){
            for(int l = j; l < z+n; l++)
                {
                    u[l] = u[l + 1];
                }
                n+z--;
                j--;
            }
        }
    }
printf("\nunion is ");
for(int i=0 ; i<(n+z-1) ;i++){
    printf("%d, ",u[i]);
}
printf("%d",u[n+z-1]);
//intersection............

int k = 0;
int I[k] ;   //intersection
for(int i=0 ; i<n ; i++ ){
    for(int j=0 ; j<z ; j++ ){
        if(a[i]==b[j]){
            I[k]=a[i] ;
            k++;

          }
}
}
printf("\nintersection is ");
for(int i=0 ; i < k ;i++){
    printf("%d ",I[i]);
    }
    return 0;
}

1 Ответ

1 голос
/ 01 ноября 2019

Это код, который я написал для поиска пересечения

#include<stdio.h>
int a[10],b[10],c[10];
//A and B will accept input from user
//C will store intersected elements 
int main()
{
    int i,j,k=0;
    printf("\nEnter 5 elements in A[] : ");
    for(i=0;i<5;i++) scanf("%d",&a[i]);
    printf("\nEnter 5 elements in B[] : ");
    for(i=0;i<5;i++) scanf("%d",&b[i]);
    for(i=0;i<5;i++){
        for(j=0;j<5;j++){
            if(a[i]==b[j])
                c[k]=a[i],k++;
        }
    }
    for(i=0;i<k;i++) printf("%d ",c[i]);
}




Input Given  
Enter 5 elements in A[] : 1 2 3 4 5

Enter 5 elements in B[] : 2 5 6 7 8

Output Produces
2 5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...