1. 程式人生 > >練習7-4 找出不是兩個陣列共有的元素

練習7-4 找出不是兩個陣列共有的元素

給定兩個整型陣列,本題要求找出不是兩者共有的元素。

輸入格式:

輸入分別在兩行中給出兩個整型陣列,每行先給出正整數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>
#define MAXN 20 

int main(void) {
	int n1, n2, i, j, k, flag, n;
	int	a[MAXN], b[MAXN], c[MAXN];

	scanf("%d", &n1);
	for ( i=0; i<n1; i++ ) {
		scanf("%d", &a[i]);
	}

	scanf("%d", &n2);
	for ( i=0; i<n2; i++ ) {
		scanf("%d", &b[i]);
	}
	
	k = 0;
	for ( i=0; i<n1; i++ ) {
		flag = 1;
		for ( j=0; j<n2; j++ ) {
			if ( a[i] == b[j] ) {
				flag = 0;
				break;
			}
		}
		if ( flag ) {
			c[k] = a[i];
			k++;
		}
	}

	for ( j=0; j<n2; j++ ) {
		flag = 1;
		for ( i=0; i<n1; i++ ) {
			if ( b[j] == a[i] ) {
				flag = 0;
				break;
			}
		}
		if ( flag ) {
			c[k] = b[j];
			k++;
		}
	}
	
	for ( i=0; i<k; i++ ) {
		for ( j=i+1; j<k; j++ ) {
			if ( c[i] == c[j] ){
				for ( n=j+1; n<k; n++ )
					c[n-1] = c[n];
				k--;
			}
		}
	}
	
	for ( i=0; i<k; i++ ){
		if ( i != 0 )
			printf(" ");
		printf("%d", c[i]);
	}
	return 0;
}