c - 我在打印两个输入数组的交集的 C 程序中遇到问题

标签 c arrays sorting

在此代码中,有两个输入数组(a 和 b)。它应该打印出两个数组(公共(public)数)之间的交集,但它只打印第一个公共(public)数。 例如 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;
}

最佳答案

这是我为寻找交叉点而编写的代码

#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

关于c - 我在打印两个输入数组的交集的 C 程序中遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58658559/

相关文章:

c - strcat 给出意外结果

javascript - DIV 中出现重复项目

Java 程序使用未经检查或不安全的操作

linux - 根据列对一组数据进行排序

c - 为什么我在这里遇到段错误?

c - 递归搜索和插入二叉树

mysql - 从一个表中选择包含另一个表中一长串单词中的任何单词的行

javascript - 排序时保留 JSON 数组

检查两个数组中的共同值并将不同的值放入第三个数组中

java - 尝试查找最小值数组时出现异常