2025-03-21 学习记录--C/C++-PTA 练习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

二、代码(C语言)⭐️

#include <stdio.h>  // 引入标准输入输出库,用于使用 scanf 和 printf 函数

int main() {
    int n1; // 定义变量 n1,用于存储第一个数组的长度
    scanf("%d", &n1); // 读取第一个数组的长度 n1

    int numArr1[n1]; // 定义第一个数组 numArr1,长度为 n1
    for (int i = 0; i < n1; i++) { // 遍历第一个数组
        scanf("%d", &numArr1[i]); // 读取第一个数组的每个元素
    }

    int n2; // 定义变量 n2,用于存储第二个数组的长度
    scanf("%d", &n2); // 读取第二个数组的长度 n2

    int numArr2[n2]; // 定义第二个数组 numArr2,长度为 n2
    for (int i = 0; i < n2; i++) { // 遍历第二个数组
        scanf("%d", &numArr2[i]); // 读取第二个数组的每个元素
    }

    int resultArr[n1 + n2]; // 定义结果数组 resultArr,长度为 n1 + n2
    int cnt = 0; // 定义变量 cnt,用于记录结果数组的长度

    // 找出 numArr1 中不在 numArr2 中的元素
    for (int i = 0; i < n1; i++) { // 遍历第一个数组
        int isUnique = 1; // 假设当前元素是唯一的
        for (int j = 0; j < n2; j++) { // 遍历第二个数组
            if (numArr1[i] == numArr2[j]) { // 如果找到相同元素
                isUnique = 0; // 标记为非唯一
                break;
            }
        }
        if (isUnique) { // 如果当前元素是唯一的
            int digit = numArr1[i]; // 获取当前元素
            resultArr[cnt] = digit; // 将当前元素添加到结果数组
            cnt++; // 结果数组长度加 1
        }
    }

    // 找出 numArr2 中不在 numArr1 中的元素
    for (int i = 0; i < n2; i++) { // 遍历第二个数组
        int isUnique = 1; // 假设当前元素是唯一的
        for (int j = 0; j < n1; j++) { // 遍历第一个数组
            if (numArr2[i] == numArr1[j]) { // 如果找到相同元素
                isUnique = 0; // 标记为非唯一
                break;
            }
        }
        if (isUnique) { // 如果当前元素是唯一的
            int digit = numArr2[i]; // 获取当前元素
            resultArr[cnt] = digit; // 将当前元素添加到结果数组
            cnt++; // 结果数组长度加 1
        }
    }

    int tempArr[cnt]; // 定义临时数组 tempArr,用于标记重复元素
    for (int i = 0; i < cnt; i++) { // 遍历结果数组
        for (int j = i + 1; j < cnt; j++) { // 检查当前元素是否与后续元素重复
            if (resultArr[i] == resultArr[j]) { // 如果找到重复元素
                tempArr[j] = 1; // 标记为重复
            }
        }
    }

    int m = 0; // 定义变量 m,用于控制输出格式
    for (int i = 0; i < cnt; i++) { // 遍历结果数组
        if (tempArr[i] != 1) { // 如果当前元素未被标记为重复
            if (m == 0) { // 如果是第一个元素
                printf("%d", resultArr[i]); // 直接输出
            } else { // 如果是其他元素
                printf(" %d", resultArr[i]); // 在前面加一个空格后输出
            }
            m++; // 输出计数器加 1
        }
    }

    return 0; // 程序正常结束
}

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小呀小萝卜儿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值