给定两个整型数组,本题要求找出不是两者共有的元素。
输入格式:
输入分别在两行中给出两个整型数组,每行先给出正整数 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
来源:
来源:PTA | 程序设计类实验辅助教学平台
链接:https://pintia.cn/problem-sets/13/exam/problems/502
提交:
题解:
#include<stdio.h>
int main(void) {
int M;
int num1[20];
scanf("%d", &M);
for (int i = 0; i < M; i++) {
scanf("%d", &num1[i]);
}
int N;
int num2[20];
scanf("%d", &N);
for (int j = 0; j < N; j++) {
scanf("%d", &num2[j]);
}
int num3[40];
int index = -1;
// 找出 num1 中特有的元素,即在 num1 中存在但 num2 中不存在的元素
for (int i = 0; i < M; i++) {
// 记录 num1[i] 在 num2[] 中是否存在:[1]不存在 [0]存在
int flag = 1;
for (int j = 0; j < N; j++) {
if (num1[i] == num2[j]) {
flag = 0;
break;
}
}
if (flag == 1) {
num3[++index] = num1[i];
}
}
// 找出 num2 中特有的元素,即在 num2 中存在但 num1 中不存在的元素
for (int i = 0; i < N; i++) {
// 记录 num2[i] 在 num1[] 中是否存在:[1]不存在 [0]存在
int flag = 1;
for (int j = 0; j < M; j++) {
if (num2[i] == num1[j]) {
flag = 0;
break;
}
}
if (flag == 1) {
num3[++index] = num2[i];
}
}
// 去除 num3[] 中的重复元素
for (int i = 0; i <= index; i++) {
for (int j = 0; j <= index; j++) {
// 同一个元素,继续去重
if (i == j) {
continue;
}
if (num3[i] == num3[j]) {
// 后续元素前移
for (int k = j; k < index; k++) {
num3[k] = num3[k + 1];
}
// 数组长度减 1
index--;
}
}
}
for (int i = 0; i <= index; i++) {
printf("%d", num3[i]);
// 数字间以空格分隔,但行末不得有多余的空格
if (i != index) {
printf(" ");
}
}
return 0;
}