首页 > 其他分享 >华为机试HJ80 整型数组合并

华为机试HJ80 整型数组合并

时间:2024-12-02 18:31:49浏览次数:8  
标签:num1 num2 int ++ arr3 整型 数组 机试 HJ80

首先看一下题

描述

题目标题:

将两个整型数组按照升序合并,并且过滤掉重复数组元素。

输出时相邻两数之间没有空格。

输入描述:

输入说明,按下列顺序输入:
1 输入第一个数组的个数
2 输入第一个数组的数值
3 输入第二个数组的个数
4 输入第二个数组的数值

输出描述:

输出合并之后的数组

示例1

输入:

3
1 2 5
4
-1 0 3 2

输出:

-101235

一、问题分析

首先读题,仔细看描述中的内容,发现需求是

1.将两个整型数组按照升序合并,并且过滤掉重复数组元素。

2.输出时相邻两数之间没有空格

3.输入描述:输入说明:按下列顺序输入:

1 输入第一个数组的个数

2 输入第一个数组的值

3 输入第二个数组的个数

4 输入第二个数组的数值

4.输出描述:输出合并之后的数组

二、解题思路

1.首先我们引入标准输入输出库以使用scanf和printf函数

#include <stdio.h>

2.进入主程序

int main() {

3.我们定义两个整数和两个数组用来读取数据

int num1, num2;

int *arr1, *arr2;

scanf("%d", &num1);

*arr1 = (int *)malloc(sizeof(int) * num1);

for(int i = 0; i < num1; i++) scanf("%d", &arr1[i]);

scanf("%d", &num2);

*arr2 = (int *)malloc(sizeof(int) * num2);

for(int i = 0; i < num2; i++) scanf("%d", &arr2[i]);

4.之后我们需要合并数组并且排序

int *arr3 = (int *)malloc(sizeof(int) * (num1+num2));

for(int i = 0; i < num1; i++) arr3[i] = arr1[i];

for(int i = 0; i < num2; i++) arr3[num1 + i] = arr2[i];

5.排序可以使用qsort

qsort(arr3,  num1 + num2, sizeof(int), compare);

6.然后我们需要去除重复的输出

for(int i = 0; i < num1 + num2; i++) {

if(!((i >= 1) && (arr3[i - 1] == arr3[i]))) {

printf("%d", arr3[i]);

}

}

}

7.compare函数

int compare(const void* a, const void* b) {

const int* intA = (int *)a;

const int* intB = (int *)b;

return *intA - *intB;

}

三、具体步骤

使用的语言是C

#include <stdio.h>
#include <stdlib.h>
int compare(const void* a, const void* b) {
    const int* intA = (int*)a;
    const int* intB = (int*)b;
    return *intA - *intB;
}

int main() {
    int num1, num2;
    scanf("%d", &num1);
    int* arr1 = (int*)malloc(num1 * sizeof(int));
    for(int i = 0; i < num1; i++) scanf("%d", &arr1[i]);
    // for(int i = 0; i < num1; i++) {
        // printf("arr1[%d] = %d\n", i, arr1[i]);
    // }
    scanf("%d", &num2);
    int* arr2 = (int*)malloc(num2 * sizeof(int));
    for(int i = 0; i < num2 ;i++) scanf("%d", &arr2[i]);
    // for(int i = 0; i < num2; i++) {
        // printf("arr2[%d] = %d\n", i, arr2[i]);
    // }
    int* arr3 = (int*)malloc((num1 + num2) * sizeof(int));
    for(int i = 0; i < num1; i++) {
        arr3[i] = arr1[i];
        // printf("arr3[%d] = %d\n", i, arr3[i]);
    }
    for(int i = 0; i < num2; i++) {
        arr3[num1 + i] = arr2[i];
        // printf("arr3[%d] is %d\n", num1 + i , arr3[num1 + i]);
    } 
    qsort(arr3, num1 + num2, sizeof(int), compare);
    for(int i = 0; i < num1 + num2; i++) {
        if(!((i >= 1) && (arr3[i] == arr3[i - 1]))) {
            printf("%d", arr3[i]);
        }
    }
    free(arr1);
    free(arr2);
    free(arr3);
    return 0;
}

标签:num1,num2,int,++,arr3,整型,数组,机试,HJ80
From: https://blog.csdn.net/bingw0114/article/details/143577721

相关文章

  • 华为机试HJ81 字符串字符匹配
    首先看一下题描述判断短字符串S中的所有字符是否在长字符串T中全部出现。请注意本题有多组样例输入。数据范围:1≤len(S),len(T)≤200 进阶:时间复杂度:O(n) ,空间复杂度:O(n) 输入描述:输入两个字符串。第一个为短字符串,第二个为长字符串。两个字符串均由小写字母组......
  • 整型关键字的平方探测法散列 陈越
    #include<bits/stdc++.h>usingnamespacestd;map<int,int>bj;intp[30050];//埃筛法求voidgetprime(){ for(inti=1;i<=30050;i++)p[i]=1; p[0]=p[1]=0; for(inti=2;i<=30050;i++)if(p[i]==1)for(intj=2*i;j......
  • 2024年华为OD机试真题-矩阵扩散-C++-OD统一考试(E卷)
    最新华为OD机试考点合集:华为OD机试2024年真题题库(E卷+D卷+C卷)_华为od机试题库-CSDN博客     每一题都含有详细的解题思路和代码注释,精编c++、JAVA、Python三种语言解法。帮助每一位考生轻松、高效刷题。订阅后永久可看,发现新题及时跟新。题目描述:存在一个m*n的二维数......
  • 华为OD机试真题-ai面板识别-2024年OD统一考试(E卷)
    最新华为OD机试考点合集:华为OD机试2024年真题题库(E卷+D卷+C卷)_华为od机试题库-CSDN博客     每一题都含有详细的解题思路和代码注释,精编c++、JAVA、Python三种语言解法。帮助每一位考生轻松、高效刷题。订阅后永久可看,发现新题及时跟新。题目描述AI识别到面板上有N(1......
  • 华为OD2024机试最新E卷题库-(A+B+C+D+E)
    在这个精心策划的专栏中,我们聚焦于华为OD2024机试的最新E卷题库,涵盖JS、C、C++、Java与Python五大编程语言,旨在为挑战者提供全面而深入的备战资源。这里不仅有精选的实战题目,还有详尽的解题思路与代码实现,帮助你掌握核心算法,理解数据结构,提升编程技巧。以下是每个卷宗的详细,可......
  • 华为OD机试E卷 --最大报酬 --24年OD统一考试(Java & JS & Python & C & C++)
    文章目录题目描述输入描述输出描述用例题目解析JS算法源码Java算法源码python算法源码c算法源码c++算法源码题目描述小明每周上班都会拿到自己的工作清单,工作清单内包含n项工作,每项工作都有对应的耗时时间(单位h)和报酬,工作的总报酬为所有已完成工......
  • 华为OD机试E卷 --绘图机器人--24年OD统一考试(Java & JS & Python & C & C++)
    文章目录题目描述输入描述输出描述用例题目解析js算法源码Java算法源码python算法源码c算法源码c++算法源码题目描述绘图机器的绘图笔初始位置在原点(0,0)机器启动后按照以下规则来进行绘制直线.尝试沿着横线坐标正向绘制直线直到给定的终点E期间......
  • 华为OD机试 - 公共子串计算 (Java 2024 E卷 100分)
    华为OD机试2024E卷题库疯狂收录中,刷题点这里。实战项目访问:http://javapub.net.cn/专栏导读本专栏收录于《华为OD机试(JAVA)真题(E卷+D卷+A卷+B卷+C卷)》。刷的越多,抽中的概率越大,私信javapub,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注......
  • 华为OD机试 - 尼科彻斯定理 (Java 2024 E卷 100分)
    华为OD机试2024E卷题库疯狂收录中,刷题点这里。实战项目访问:http://javapub.net.cn/专栏导读本专栏收录于《华为OD机试(JAVA)真题(E卷+D卷+A卷+B卷+C卷)》。刷的越多,抽中的概率越大,私信javapub,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注......
  • 华为OD机试真题-最少量线段覆盖-2024年OD统一考试(E卷)
    最新华为OD机试考点合集:华为OD机试2024年真题题库(E卷+D卷+C卷)_华为od机试题库-CSDN博客     每一题都含有详细的解题思路和代码注释,精编c++、JAVA、Python三种语言解法。帮助每一位考生轻松、高效刷题。订阅后永久可看,发现新题及时跟新。题目描述给定坐标轴上的一组线......