题目要求分别输入两个 非零 整数 数列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;
}
scanf_s("%d", array1[i]); //依次输入元素
改为:
scanf("%d", &array1[i]); //依次输入元素
因为你array1的后面加了[ ],所以array1[i]就不是指针了
这类求交集的题目应该用hash来做效果会比较高,特别是求字符串集合的交集的时候。这里的整数集合中整数本身就可以看做一个hash值,所以体现不出这种算法的优势。