给定两个整型数组,本题要求找出不是两者共有的元素。
输入格式:
输入分别在两行中给出两个整型数组,每行先给出正整数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
其实这道题最后输出的时候我最初用了先去重再输出,即用原数组和新数组比较,新数组没有原数组的就放进新数组,但是这会导致一个问题,就是如果原数组中包含0元素,则就不会把0元素放进新数组,因为新数组初始化默认所有值为0,导致最后一个测试用例过不去,于是换了一种新输出方法。
即找从0位开始到该元素前一位是否有和该元素相同的,有则终止内层循环进行下一轮输出元素判断。
#include<stdio.h>
#include<ctype.h>
#include<string.h>
#include<math.h>
#include<stdlib.h>
int main()
{
int m, n, i, k = 0, j;
scanf("%d", &m);
int arr1[m], arr3[25], temp, arr4[40];
for ( i = 0; i < m; i++)
scanf("%d", &arr1[i]);
scanf("%d", &n);
int arr2[n];
for ( i = 0; i < n; i++)
scanf("%d", &arr2[i]);
//n中找没有m包含的数
for ( i = 0; i < m; i++){
temp = arr1[i];
for (j = 0; j < n; j++){
if ( arr2[j] == temp)
break;
}
if (j == n){
arr3[k] = temp;
k++;
}
}
//m中找没有n中包含的数
for ( i = 0; i < n; i++){
temp = arr2[i];
for (j = 0; j < m; j++){
if ( arr1[j] == temp)
break;
}
if (j == m){
arr3[k] = temp;
k++;
}
}
printf("%d", arr3[0]);
//输出
for(i = 1; i < k; i++)
{
for(j = 0; j < i; j++) //判断待输出位之前的元素是否和该元素相同,相同则终止,判断下一个待输出的元素
{
if(arr3[i] == arr3[j])
break;
}
if(j == i) //内层循环结束后,j == i,之前元素没有与之重复的,输出该元素。
printf(" %d", arr3[i]);
}
return 0;
}