因为这里的话,去重使用桶不知道最大上线范围,浪费时间,所以不用桶排序去做,直接两个数组都排好序,如果说这两个数组的值有相同的话,一定会在归并排序的归并上遇到,遇到两个相同的,新数组中只放一个,遇到两个相同或者说和新数组最后一个相同的,就都去掉,第一次的话是因为数组开的不够大,所以错误了,第二次修改了数组大小之后就可以了。

#include<iostream>
#include<string.h>
#include<algorithm>
using namespace std;
int a[1005],b[1005],c[1005];
int main(){
    int n,m;
    while(cin>>n){
        for(int i=0;i<n;i++){
            cin>>a[i];
        }
        sort(a,a+n);
        cin>>m;
        for(int i=0;i<m;i++){
            cin>>b[i];
        }
        sort(b,b+m);
        //处理第一个值
        int i=0,j=0,k=0;
        if(a[0]<b[0]){
            c[k++]=a[i++];    
        }else if(a[0]>b[0]){
            c[k++]=b[j++];
        }else{
            c[k++]=a[i++];
            j++;
        }

        while(i<n&&j<m){
            if(a[i]<b[j]){
                if(c[k-1]!=a[i]){
                    c[k++]=a[i++];
                }else{
                    i++;
                }
            }else if(a[i]>b[j]){
                if(c[k-1]!=b[j]){
                    c[k++]=b[j++];
                }else{
                    j++;
                }
            }else{
                if(c[k-1]==a[i]){
                    i++;
                    j++;
                }else{
                    c[k++]=a[i++];
                    j++;
                }
            } 
        }
        //剩余数字如果没有全部写进去 
        while(i<n){
            if(c[k]==a[i]){
                i++;
            }else{
                c[k++]=a[i++];                
            }    
        }
        while(j<m){
            if(c[k]==b[j]){
                j++;
            }else{
                c[k++]=b[j++];                
            }    
        }
        for(int i=0;i<k;i++){
            cout<<c[i];
        } 
        cout<<endl;
    }
    return 0;
}