当前位置: 首页 > 编程笔记 >

C程序在两个数组上执行交集运算

公孙驰
2023-03-14
本文向大家介绍C程序在两个数组上执行交集运算,包括了C程序在两个数组上执行交集运算的使用技巧和注意事项,需要的朋友参考一下

交集运算

如果数组1 = {1,2,3,4,6}

  数组2 = {1,2,5,6,7}

然后,array1和array 2的交集是

Array1 ^ array 2 = {1,2,3,4,6} ^ {1,2,5,6,7}
                 = {1,2,6}

一组公共元素称为交集。

交集的逻辑如下-

k=0;
for(i=0;i<size1;i++){
   for(j=0;j<size2;j++){
      if(a[i]==b[j]){
         intersection[k]=a[i];
         k++;
      }
   }
}

程序

以下是在两个数组上执行交集运算的C程序-

#include<stdio.h>
int removerepeated(int size,int a[]);
void sort(int size,int a[]);
main(){
   int i,size1,size2,size,j=0,k,intersectionsize;
   printf("Enter size of an array1\n");
   scanf("%d",&size1);
   printf("Enter size of an array2\n");
   scanf("%d",&size2);
   int a[size1],b[size2],uni[size1+size2];
   if(size1<size2){
      intersectionsize=size1;
   }else if(size1>size2){
      intersectionsize=size2;
   }else{
      intersectionsize=size1;
   }
   int intersection[intersectionsize];
   printf("Enter numbers for array 1\n");
   for(i=0;i<size1;i++){
      scanf("%d",&a[i]);
   }
   printf("Enter numbers for array 2\n");
   for(i=0;i<size2;i++){
      scanf("%d",&b[i]);
   }
   //交集运算开始
   k=0;
   for(i=0;i<size1;i++){
      for(j=0;j<size2;j++){
         if(a[i]==b[j]){
            intersection[k]=a[i];
            k++;
         }
      }
   }
   //Sorting
   sort(k,intersection);
   //Removing
   size=removerepeated(k,intersection);
   printf("Array after intersection\n");
   if(size>0){
      for(i=0;i<size;i++){
         printf("%d\n",intersection[i]);
      }
   }else{
      printf("No intersection\n");
   }
}
int removerepeated(int size,int a[]){
   int i,j,k;
   for(i=0;i<size;i++){
      for(j=i+1;j<size;){
         if(a[i]==a[j]){
            for(k=j;k<size;k++){
               a[k]=a[k+1];
            }
            size--;
         }else{
            j++;
         }
      }
   }
   return(size);
}
void sort(int size,int a[]){
   int i,j,temp;
   for(i=0;i<size;i++){
      for(j=i+1;j<size;j++){
         if(a[i]>a[j]){
            temp=a[i];
            a[i]=a[j];
            a[j]=temp;
         }
      }
   }
}

输出结果

执行以上程序后,将产生以下结果-

Enter size of an array1
5
Enter size of an array2
2
Enter numbers for array 1
4
5
6
7
8
Enter numbers for array 2
4
1
Array after intersection
4
 类似资料:
  • 本文向大家介绍C程序对两个数组执行并集运算,包括了C程序对两个数组执行并集运算的使用技巧和注意事项,需要的朋友参考一下 联合是用C编程语言提供的一种特殊数据类型,它允许将不同的数据类型存储在同一内存位置。联合提供了一种将相同内存位置用于多种用途的有效方法。 并集运算 如果数组1 = {1,2,3,4,6}     数组2 = {1,2,5,6,7} 然后,将array1和array 2的并集为 A

  • 我如何找到两个数组共有的值?在这种情况下,应返回和。

  • 我有一个问题,在java中找到两个数组之间的区别,我的例子就像假设我们有两个数组。数组和数组。我想有两个结果第一个结果是一个数组,它从数组“A”中找到丢失的对象,第二个结果是一个数组,它在数组“B”中找到添加的对象。第一个结果应类似于,第二个结果类似于。 感谢您的评论。

  • 我已经读过一些其他的堆栈溢出线程: 在java中求两个多集的交集 我如何获得两个数组之间的交集作为一个新数组? 我试图检查两个数组以及它们的元素数(numElementsInX和numElementsInY),并返回一个包含数组x和y的公共值的新数组。他们的交集。 编辑代码

  • 问题内容: 从这个,我们知道要解决两个排序的数组的交叉方法。那么如何获得多个排序数组的交集呢? 基于两个排序数组的答案,我们可以将其应用于多个数组。这是代码 有更好的解决方法吗? 更新1 从这两个主题1和2看来,这是一种更有效的方法。 更新2 为了提高性能,也许可以使用代替我上面的代码。变量保存所有向量的当前最大值。因此,只需将根值与进行比较,如果它们相同,则可以将此元素放入交集列表。 问题答案:

  • 问题内容: 我有两个排序集,并且想要进行交集,即。 关于效率,是否有比以下更好的方法: 问题答案: 您应该先使用ZCARD检查哪些元素较少,然后克隆并修剪较短的元素。 其次,您将剩下2个剩菜。您可以重复使用同一辅助程序,以加快清除速度。 我还想建议克隆使用DUMP和RESTORE,但是对于排序集的情况,ZUNIONSTORE实际上要快得多。这是一个100万个元素集的时间安排: