集合

来源:互联网 发布:.name域名是什么 编辑:程序博客网 时间:2024/06/10 07:52

题意描述:给俩个集合,这俩个集合里面可能有相同的元素,合并到一个集合的时候把重复的数字去掉,并排序按从小到大的顺序,注意每个元素之间有空格。奋斗

思路:俩个集合合并的时候注意把b数组合并到c数组的时候,这时候c数组已经有了n-1个元素,b数组复制进来c数组是从下标为n开始复制,需要借用一个中间变量h,h为0,即从b[0]开始复制,之后h++实现b数组的全部复制。我感觉应该先排序之后再去重会简单一些,边合并边去重好像很难,所以我想先合并然后排序最后去重。去重可以这样来,只要不相等的元素我们就可以直接拿来用呗,借助一个中间变量b,把它定义为c[0],判断

c[1]是否和它相等,如果不相等直接输出就OK了,然后把c[i]赋值给d,直到c[n+m-1]==d的时候,这时候表示c数组已经扫描完事~\(≧▽≦)/~。

代码:

#include<stdio.h>
#include<algorithm>
#include<iostream>
#include<string.h>
using namespace std;
int main()
{
    int n,m;
    while(~scanf("%d%d",&n,&m))
    {
        int a[20000],b[20000],c[20000];
        for(int i=0; i<n; i++)
        {
            scanf("%d",&a[i]);
        }
        for(int i=0; i<m; i++)
        {
            scanf("%d",&b[i]);
        }
        for(int i=0; i<n; i++)
        {
            c[i]=a[i];
        }
        int h=0;
        for(int i=n; i<n+m; i++)
        {
            c[i]=b[h];
            h++;
        }
        sort(c,c+n+m);
        int d=c[0];
        for(int i=1; i<n+m; i++)
        {


            if (c[i] != d)
            {
                printf("%d ", d);
                d = c[i];
            }


            if (c[n+m-1] == d)
                printf("%d\n", d);
        }
    }
}

原创粉丝点击