浙大版《C语言程序设计(第3版)》题目集:练习7-4 找出不是两个数组共有的元素 (20分)

给定两个整型数组,本题要求找出不是两者共有的元素。

输入格式: 输入分别在两行中给出两个整型数组,每行先给出正整数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>
//replace()函数的作用是对长度为n的a数组,删去下标为i的值
void replace(int a[], int n, int i) {
    
    
	for (int j = i; j < n-1; j++) {
    
    
		a[j] = a[j+1];
	}
}
int main(void) {
    
    
	int i, j, N1, N2, newN1, newN2;
	int num1[20], num2[20], dis[40], index = 0;
    //输入控制
	scanf("%d", &N1);
	for (i = 0; i < N1; i++) {
    
    
		scanf("%d", &num1[i]);
	}
	scanf("%d", &N2);
	for (i = 0; i < N2; i++) {
    
    
		scanf("%d", &num2[i]);
	}
	//newN1和newN2分别记录数组num1和数组num2去重后的数组长度值
	newN1 = N1;
	newN2 = N2;
	//去除num1数组中的重复值
	for (i = 0; i < newN1; i++) {
    
    
		for (j = i + 1; j < newN1; j++) {
    
    
			if (num1[i] == num1[j]) {
    
    
				replace(num1,newN1,j);
				newN1--;
			}
			
		}
	}
	//去除num2数组中的重复值
	for (i = 0; i < newN2; i++) {
    
    
		for (j = i + 1; j < newN2; j++) {
    
    
			if (num2[i] == num2[j]) {
    
    
				replace(num2,newN2,j);
				newN2--;
			}
		}
	}
	//找出num1数组中和num2数组的不同值
	for (i = 0; i < newN1; i++) {
    
    
		for (j = 0; j < newN2; j++) {
    
    
			if (num1[i] == num2[j]) {
    
    
				break;
			}
		}
		//运行到这里有两种可能的结果
		//一是因为循环结束
		//二是因为有相同的部分而break出来的
		//如果因为有相同而break出来的,表示对num1[i]而言在num2数组中没有相同的,用数组dis记录下来
		if (num1[i] != num2[j]) {
    
    
			dis[index++] = num1[i];
		}
	}
	//找出num2数组中和num1数组的不同值
	for (i = 0; i < newN2; i++) {
    
    
		for (j = 0; j < newN1; j++) {
    
    
			if (num2[i] == num1[j]) {
    
    
				break;
			}
		}
		if (num2[i] != num1[j]) {
    
    
			dis[index++] = num2[i];
		}
	}
	//输出结果
	for (i = 0; i < index - 1; i++) {
    
    
		printf("%d ", dis[i]);
	}
	printf("%d", dis[i]);
	return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_43489041/article/details/105682028