【华为od刷题(C++)】HJ80 整型数组合并

我的代码:

#include <iostream>//引入输入输出流,用于后续的输入输出操作

#include <map>//引入map容器,它是一个关联容器,存储键值对
//map会自动按照键值进行排序

#include <vector>//引入vector容器,但在此代码中并没有实际使用vector

using namespace std;
//表示使用标准命名空间,避免后续使用标准库中的类和函数时需要加上std::前缀

int main() {
    int n1, n2, t;
    /*int n1, n2, t; 声明了三个整数变量:
    n1 用于存储第一个整数序列的元素数量
    n2 用于存储第二个整数序列的元素数量
    t 用于存储当前输入的元素值*/

    while (cin >> n1) {
        //循环读取输入的n1,直到输入结束(例如文件输入流结束或ctrl+d)

        map<int, int> m;
        /*声明了一个map容器m,其键值对为int类型
        键为输入的整数,值为该整数出现的次数
        (在这里实际上是统计了该整数的出现次数)*/

        for (int i = 0; i < n1; ++i) {
            //循环读取第一个整数序列的n1个元素

            cin >> t;
            //从输入流中读取一个整数t

            m[t]++;
            /*将该整数t的计数值加1,map自动为t创建一个键值对,
            如果t不存在,map会自动创建,并将计数值初始化为0,再加1*/
        }

        cin >> n2;
        //读取第二个整数序列的元素数量

        for (int i = 0; i < n2; ++i) {
            cin >> t;
            //读取第二个序列的n2个整数

            m[t]++;
            //将每个整数在map中相应位置的计数值加1
        }
        for (auto it : m) {
            //遍历map容器中的每个键值对

            //输出每个唯一整数
            cout << it.first;
            /*it.first 表示当前map元素的键(即整数本身),
            因为map会按键自动排序,所以这里输出的是按升序排列的唯一整数*/
        }
        cout << endl;
        //输出换行,表示输出结束
    }
    return 0;
}

这个代码的思路是通过输入两个整数序列,统计它们出现的每个数字,最后输出所有唯一数字的集合,且按升序排列。

代码总结:

  1. 引入库

    • <iostream>:用于输入输出
    • <map>:用于存储键值对,自动按键进行排序
    • <vector>:此处虽然引入,但并未实际使用
  2. 主函数解析

    • 声明变量

      • n1n2 用于存储两个整数序列的长度
      • t 用于存储当前输入的数字
    • 读取数据并处理

      • 通过while(cin >> n1)循环持续输入数据,直到输入结束
      • 对于每个输入的整数序列,使用map<int, int> m来存储每个数字及其出现的次数
      • 第一个序列的数字依次读入,并更新在map中的计数
      • 第二个序列的数字也依次读入,同样更新在map中的计数
    • 输出结果

      遍历map容器(它会按键自动排序),输出所有唯一的数字
  3. 代码的核心逻辑

    • 利用map的特性,自动去重并对数字按升序排序
    • 每个数字的出现次数通过增加map中对应键的值来统计

总结:

这段代码实现的功能是:接收两个数字序列,统计它们的所有不同数字,并按升序输出;由于使用了map容器,它会自动去除重复数字并排序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值