【问题描述】比较两组整数是否有相同的元素,不考虑元素的顺序,并忽略元素重复的情况,每组元素个数不超过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出现过,是重复元素。此时,退出循环,输出重复元素。