C语言,两个非零整数数列求交集

题目要求分别输入两个 非零 整数 数列A,B,然后求AB的交集并输出。
要求先输入A数列元素的个数,在分别输入元素,B数列同理
如:
3
1 3 4
4
2 4 5 3
输出为
3 4

下面是我的代码,编译通过,但输入第二个数字时报错了,请问哪里出错了呢?

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

int main()
{
    int num1, array1[20], i;          //num1记数列A元素个数
    scanf_s("%d", &num1);          //输入元素个数
    for (i = 0; i < num1; i++)
    {
        scanf_s("%d", array1[i]);       //依次输入元素
        if (array1[i] == 0)                 //如果输入0,则显示error,并重新输入
        {
            i--;
            printf("ERROR\n");
        }
    }

    int num2, array2[20], j;             //B数列操作同A
    scanf_s("%d", &num2);
    for (j = 0; j < num2; j++)
    {
        scanf_s("%d", array2[j]);
        if (array2[j] == 0)
        {
            i--;
            printf("ERROR\n");
        }
    }

    int count[20], num = 0, n;         //count用来存储两数列的交集,n用来记录交集的个数
    for (i = 0; i < num1; i++)
    {
        for (j = 0; j < num2; j++)
        {
            if (array1[i] == array2[j])
            {
                count[num] = array1[i];       //两数列中元素相等时,赋值给count
                array1[i] = array2[j] = 0;
                num++;
            }
        }
    }
    n = num;                 //记录交集元素的个数

    for (num = 0; num < n; num++)
    {
        printf("%d ", count[num]);              //依次输出交集的元素
    }

    system("pause");
    return 0;
}

图片说明改成 &array1[i]

scanf_s("%d", array1[i]); //依次输入元素
改为:
scanf("%d", &array1[i]); //依次输入元素

因为你array1的后面加了[ ],所以array1[i]就不是指针了

这类求交集的题目应该用hash来做效果会比较高,特别是求字符串集合的交集的时候。这里的整数集合中整数本身就可以看做一个hash值,所以体现不出这种算法的优势。