给定两个整型数组,本题要求找出不是两者共有的元素。
输入格式:
输入分别在两行中给出两个整型数组,每行先给出正整数N(≤20),随后是N个整数,其间以空格分隔。
输出格式:
在一行中按照数字给出的顺序输出不是两数组共有的元素,数字间以空格分隔,但行末不得有多余的空格。题目保证至少存在一个这样的数字。同一数字不重复输出。
输入样例:
10 3 -5 2 8 0 3 5 -15 9 100
11 6 4 8 2 6 -5 9 0 100 8 1
输出样例:
3 5 -15 6 4 1
代码实现:
#include<stdio.h>
int main()
{
int n1, n2, i, m1, m2, j,count=1,flag=1,temp=0,ret=0;
int arr1[20];
int arr2[20];
int arr3[20];
int arr4[20];
scanf("%d", &n1);
int max = n1;
for (i = 0;i < n1;i++)//给数组赋值
{
scanf("%d", &m1);
arr1[i] = m1;
}
scanf("%d", &n2);
for (i = 0;i < n2;i++)
{
scanf("%d", &m2);
arr2[i] = m2;
}
if (n1 < n2)
max = n2;
for (i = 0;i < max;i++)
{
for (j = 0;j < (n1 + n2 - max);j++)
{
//找出俩者共有的元素
if(max==n2)//若第二个数组最大
{
if (arr1[j] == arr2[i])
{
arr3[count-1] = arr1[j];
count++;
}
}
else if(max==n1)//若第一个数组最大
{
if (arr2[j] == arr1[i])
{
arr3[count-1] = arr2[j];
count++;
}
}
}
}
for(i=0;i<n1;i++)
{
for (j = 0;j < count;j++)
{
if (arr3[j] != arr1[i])
{
flag = 2;
}
else
{
flag = 1;
break;
}
}
if (flag == 2)
{
arr4[temp] = arr1[i];//将不同的元素存放在arr4中
temp++;
}
}
for(i=0;i<n2;i++)
{
for (j = 0;j < count;j++)
{
if (arr3[j] != arr2[i])
{
flag = 2;
}
else
{
flag = 1;
break;
}
}
if (flag == 2)
{
arr4[temp] = arr2[i];//将不同的元素存放在arr4中
temp++;
}
}
for (i = 0;i < temp;i++)
{
for (j = i+1;j < temp;j++)//剔除重复元素
{
if (arr4[j] == arr4[i])
arr4[j] = arr3[0];
}
if(arr4[i]!=arr3[0])
{
if (ret == 0)
printf("%d", arr4[i]);
else
printf(" %d", arr4[i]);
ret++;
}
}
return 0;
}