第一次把c数组开小了,忽略了当n,m等于10000时需要一个比较大的数组
思路是将两个数组元素复制到另一个数组,然后进行排序,将重复的元素用一个数组记录下来,然后进行遍历,一旦重复就跳过。输出即可
注意输出的格式
#include<stdio.h>
#include<string.h>
void sort(int * num, int n)
{
int temp;
for (int i = 0; i < n-1; i++) {
for (int j = i+1; j < n; j++) {
if (num[i] > num[j]) {
temp = num[i];
num[i] = num[j];
num[j] = temp;
}
}
}
}
int main(void)
{
int a[10005], b[10005], c[20015], repeate[20005];
int n, m, i, k, j, flag;
while (scanf("%d %d", &n, &m) != EOF && n && m) {
flag = 0;
for (int i = 0; i < n; i++) {
scanf("%d", &a[i]);
}
for (int i = 0; i < m; i++) {
scanf("%d", &b[i]);
}
for (i = 0, k = 0; i < n + m; i++) {
if (i < n) {
c[i] = a[i];
} else {
c[i] = b[k++];
}
}
c[i] = '\0';
sort(c, n+m);
for (i = 0, k = 0; i < n + m; i++) {
if (c[i] == c[i+1]) {
repeate[k++] = i+1;
}
}
if (k > 0) {
for (i = 0; i < m+n; i++) {
for (j = 0; j < k; j++) {
if (i == repeate[j]) {
flag = 0;
break;
} else {
flag = 1;
}
}
if (flag) {
if (i == 0) {
printf("%d", c[i]);
} else {
printf(" %d", c[i]);
}
}
}
} else {
for (i = 0; i < m+n; i++) {
if (i == 0) {
printf("%d", c[i]);
} else {
printf(" %d", c[i]);
}
}
}
putchar('\n');
}
return 0;
}