描述
给你两个集合,要求{A} + {B}.
注:同一个集合中不会有两个相同的元素.
输入
有多组测试数据
每组输入数据分为三行,第一行有两个数字n,m(分别代表第一个集合和第二个集合的元素个数);第二行有 n 个数字,代表集合A中的元素;第三行有 m 个数字,代表集合B中的元素。所有元素范围:[1,1000]
输出
针对每组数据输出一行数据,表示合并后的集合,要求从小到大输出,每个元素之间有一个空格隔开.
输入样例 1
1 2 1 2 3 1 2 1 1 2
输出样例 1
1 2 3 1 2
提示
最后一个数后面没空格
#include <stdio.h>
#include <stdlib.h>
// 冒泡排序函数
void bubbleSort(int arr[], int n) {
for (int i = 0; i < n-1; i++) {
for (int j = 0; j < n-i-1; j++) {
if (arr[j] > arr[j+1]) {
// 交换 arr[j] 和 arr[j+1]
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}
// 合并两个集合并排序
int mergeSets(int *A, int n, int *B, int m, int *result) {
// 将A的所有元素放入result
//int C[100];
for (int i = 0; i < n; i++) {
result[i] = A[i];
}
// 将B的所有元素放入result的剩余部分
for (int i = 0; i < m; i++) {
result[n+i] = B[i];
}
int l=m+n;//长度
// 对合并后的数组进行排序
bubbleSort(result, l);
//去除重复元素
int s=0;
for(int i=1;i<n+m;i++){
if(result[s]!=result[i]){
result[++s]=result[i];
}
else
l--;
}
return l;
}
int main() {
int n, m;
// 不断读取输入直到文件结束
while (scanf("%d %d", &n, &m) != EOF) {
int *A = (int *)malloc(n * sizeof(int));
int *B = (int *)malloc(m * sizeof(int));
int *result = (int *)malloc((n + m) * sizeof(int));
// 读取集合A的元素
for (int i = 0; i < n; i++) {
scanf("%d", &A[i]);
}
// 读取集合B的元素
for (int i = 0; i < m; i++) {
scanf("%d", &B[i]);
}
int l;
// 合并集合并排序
l=mergeSets(A, n, B, m, result);
// 输出合并后的集合
for (int i = 0; i <l; i++) {
if (i > 0) printf(" ");
printf("%d", result[i]);
}
printf("\n");
// 释放内存
free(A);
free(B);
free(result);
}
return 0;
}