比较两组整数是否有相同的元素

【问题描述】比较两组整数是否有相同的元素,不考虑元素的顺序,并忽略元素重复的情况,每组元素个数不超过100。

(tips:两组数组中的相同元素也可能会有重复,输出的时候,注意重复元素只输出一次)

【样例输入】请输入数组a的元素个数:9<回车>

                2  5  10  17  10  8  5  10  12(以空格分隔)

                请输入数组b的元素个数:6<回车>

                12  8  10  17  5  2(以空格分隔)

【样例输出】相同的元素为:

                2#5#10#17#8#12#("#"代表空格,用于分辨输出空格的个数)

                如果没有相同元素则输出

                No Answer

【样例说明】

  绿色——输入提示信息    红色——键盘输入的部分

  为避免出现格式错误,请直接拷贝粘贴题目中给的提示信息到你的程序中。

望采纳



#include <stdio.h>
#include <stdlib.h>
 
int insort(int k[],int n); // 排序去除重复元素
 
int main()
{
    //input array1
    printf("Please input array1:");
    int i1=0,n1=0;
    int *a1=(int*)malloc(n1*sizeof(int));
    char b;
    while((b=getchar())!='\n')
    {
        ungetc(b,stdin);
        a1 = (int*)realloc(a1,++n1*sizeof(int));
        scanf("%d",&a1[i1++]);
    }
    //input array2
    printf("Please input array2:");
    int i2=0,n2=0;
    int *a2=(int*)malloc(n2*sizeof(int));
    while((b=getchar())!='\n')
    {
        ungetc(b,stdin);
        a2 = (int*)realloc(a2,++n2*sizeof(int));
        scanf("%d",&a2[i2++]);
    }
 
    //show array
    printf("\narray1: ");

思路1:先对两个数组排序(升序),然后从左到右遍历两个数组,依次比较其元素。当数组1元素较大时,移动数组2游标;当数组1元素较小时,移动数组1游标。一直到出现相等元素,就退出循环,输出重复元素。

思路2:用一个set/map先对数组1所有元素进行记录,出现过的元素一定会在set/map中。再遍历数组2元素,每个元素都在之前的set/map中查找,如果能找到,说明已经在数组1出现过,是重复元素。此时,退出循环,输出重复元素。