PTA-找出不是两个数组共有的元素

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

输入格式:

输入分别在两行中给出两个整型数组,每行先给出正整数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

分析:

  1. 读取一个整数 m,表示数组 a 的长度。
  2. 读取 m 个整数,存入数组 a
  3. 读取一个整数 n,表示数组 b 的长度。
  4. 读取 n 个整数,存入数组 b
  5. 创建一个数组 c,长度为 m+n,用于存储在数组 a 或 b 中唯一不存在的元素。初始化为0。
  6. 第一层循环遍历数组 a 中的每个元素,第二层循环遍历数组 b。如果找到一个元素在 b 中不存在,则将其存入 c
  7. 第一层循环遍历数组 b 中的每个元素,第二层循环遍历数组 a。如果找到一个元素在 a 中不存在,则将其存入 c
  8. 输出数组 c 中的第一个元素。
  9. 从第二个元素开始遍历数组 c,对于每个元素,遍历前面的元素,如果发现重复则跳过。如果不重复,则输出。

代码:

#include 
int main()
{
    int m;
    int a[20], i;
    scanf("%d", &m);
    for (i = 0; i < m; i++)
        scanf("%d", &a[i]);
    int n;
    scanf("%d", &n);
    int b[20];
    for (i = 0; i < n; i++)
        scanf("%d", &b[i]);
    int j;
    int c[20], k = 0;
    for (i = 0; i < m; i++)
    {
         for (j = 0; j < n; j++)
         {
             if (a[i] == b[j])
                 break;
         }
         if (j >= n)
             c[k++] = a[i];
    }
    for (i = 0; i < n; i++)
    {
        for (j = 0; j < m; j++)
        {
            if (b[i] == a[j])
                break;
        }
        if (j >= m)
            c[k++] = b[i];
    }
    printf("%d", c[0]);
    for (i = 1; i < k; i++)
    {
        for (j = 0; j < i; j++)
        {
            if (c[i] == c[j]) //同一数字不重复输出
                break;
        }
        if (j >= i)
            printf(" %d", c[i]);
    }
    printf("\n");

    return 0;
}

总结: 

输出的结果就是两个数组中不在对方数组中的唯一元素,且不会有重复的数字。

你可能感兴趣的:(算法,数据结构)