集合
来源:互联网 发布:.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);
}
}
}
- 集合
- 集合
- 集合
- 集合
- 集合
- 集合
- 集合
- 集合
- 集合
- 集合
- 集合
- 集合
- 集合
- 集合
- 集合
- 集合
- 集合
- 集合
- Linux部署mysql
- 传说中的ACM大牛们
- String源码分析,解读面试题
- 不配置OpenCV环境,以动态链接的方式使用OpenCV
- 避免使用终结方法。
- 集合
- TensorFlow(二) 基本用法
- 系统与管理命令--User和Group类
- $GLOBALS['HTTP_RAW_POST_DATA'] 和$_POST的区别
- Azkaban学习笔记 --- Azkaban调研笔记
- virtualenv在windows10下面使用的注意事项
- 九大排序算法
- Most Frequent Subtree Sum问题及解法
- 关注民生民情——华北水利水电大学“情艺”国情社情调查