В этом коде два входных массива (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;
}