首先看一下题
描述
题目标题:
将两个整型数组按照升序合并,并且过滤掉重复数组元素。
输出时相邻两数之间没有空格。
输入描述:
输入说明,按下列顺序输入:
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