这个题实际上思路是比较简单的,但是需要注意细节问题。

  思路:读入数组之后进行排序,然后再求交、并、补集。

  首先排序:(使用的是冒泡排序)

 #include<iostream>
using namespace std;
int result1[];
int result2[];
int result3[];
int k1 = ;
int k2 = ;
int k3 = ;
void swap(int *a,int *b)
{
int temp = *a;
*a = *b;
*b = temp;
}
void sort(int a[],int n)
{
for(int i = ; i < n; i++)
{
for(int j = ; j < n-i; j++)
{
if(a[j]<a[j-])
swap(&a[j],&a[j-]);
}
}
}

求交集:思路是将两个数组元素进行比较,如果有相同元素,就放到result1数组(结果数组)中。

代码如下:

 void intersection(int a[],int b[],int n,int m)//求交集
{
int i = ,j = ;
while()
{
if(i==n||j==m) break;
else
{
if(a[i]<b[j])
{
i++;
}
else if(a[i]==b[j])
{
result1[k1++] = a[i];
i++;
j++;
}
else
{
j++;
}
}
}
}

这个是对上面代码的简单解释。可能有点不清楚,如果大家有更好的思路,欢迎评论提出。

其实知道了交集的做法之后,并集和补集也就很清楚了。

并集:

 void unions(int a[],int b[],int n,int m)//求并集
{
int i=,j=;
k2 = ;
while()
{
if(i==n||j==m) break;//有一个数组结束,循环就结束
else
{
if(a[i]<b[j]) //遇到小的直接放入,因为我们本身就是从小到大过数组的,此时只移一个指针
{
result2[k2++] = a[i];
i++;
}
else if(a[i]==b[j])//如果相等,我们只需要放一个就可以,两个数组指针同时后移
{
result2[k2++] = a[i];
i++;
j++;
}
else
{
result2[k2++] = b[j];
j++;
}
}
}
if(i<n)//因为存在数组长度不等的情况,我们需要再做别的操作。此时已经不需要比较
{
while(i!=n)
{
result2[k2++] = a[i];
i++;
}
}
if(j<m)//同上
{
while(j!=m)
{
result2[k2++] = b[j];
j++;
}
}
}

补集:

 void complement(int a[],int n)//求b相对于a的补集
{
int i = ;
int j = ;
k3 = ;
while(j<k1&&i<n)//二者缺一不可
{
if(a[i]!=result1[j])
{
if(a[i]>result1[j])//自己测试的时候可能一个数组中有相同的元素,所以加了这个判断,不过题目似乎不用
{
j++;
}
else
{
result3[k3] = a[i];
k3++;
i++;
}
}
else
{
i++;
}
}
while(i<n)
{
result3[k3++] = a[i];
i++;
}
}

我在补集的时候,判断条件起初只写了一个j<k1,然后运行结果错误,后来发现问题,加以改正。

不足之处希望大家提出来,一起学习。个人觉得可能思路或者代码还是冗余比较多,不是那么精炼,求大神教!

蓝桥杯_算法训练_ALGO10_集合运算的更多相关文章

  1. ALGO-10_蓝桥杯_算法训练_集合运算(排序)

    问题描述 给出两个整数集合A.B,求出他们的交集.并集以及B在A中的余集. 输入格式 第一行为一个整数n,表示集合A中的元素个数. 第二行有n个互不相同的用空格隔开的整数,表示集合A中的元素. 第三行 ...

  2. ALGO-115_蓝桥杯_算法训练_和为T(枚举)

    问题描述 从一个大小为n的整数集中选取一些元素,使得它们的和等于给定的值T.每个元素限选一次,不能一个都不选. 输入格式 第一行一个正整数n,表示整数集内元素的个数. 第二行n个整数,用空格隔开. 第 ...

  3. ALGO-143_蓝桥杯_算法训练_字符串变换

    问题描述 相信经过这个学期的编程训练,大家对于字符串的操作已经掌握的相当熟练了.今天,徐老师想测试一下大家对于字符串操作的掌握情况.徐老师自己定义了1,,,,5这5个参数分别指代不同的5种字符串操作, ...

  4. ALGO-27_蓝桥杯_算法训练_FBI树(树,递归)

    问题描述 我们可以把由“”和“”组成的字符串分为三类:全“”串称为B串,全“”串称为I串,既含“”又含“”的串则称为F串. FBI树是一种二叉树,它的结点类型也包括F结点,B结点和I结点三种.由一个长 ...

  5. ALGO-6_蓝桥杯_算法训练_安慰奶牛

    记: 本题目考的是最小生成数,可使用Kruskal算法 第一次,20分 原因:使用动态数组,有概率报运行错误(大雾= =) 第二次,100分 原因:改用静态数组,一次过 示例代码: #include ...

  6. ALGO-5_蓝桥杯_算法训练_最短路

    记: 一开始没接触过关于最短距离的算法,便开始翻阅关于图的知识, 得知关于最短距离的算法有Dijkstra算法(堆优化暂未看懂),Bellman-Ford算法,Floyd算法,SPFA算法. 由于数据 ...

  7. 蓝桥杯_算法训练_Torry的困惑(基本型)

    这个题目就是求质数的乘积,在加一个模,思路比较简单,直接上代码: #include<iostream> using namespace std; bool isPrime(int a) { ...

  8. 蓝桥杯_算法训练_区间k大数查询

    问题描述 给定一个序列,每次询问序列中第l个数到第r个数中第K大的数是哪个. 输入格式 第一行包含一个数n,表示序列长度. 第二行包含n个正整数,表示给定的序列. 第三个包含一个正整数m,表示询问个数 ...

  9. ALGO-43_蓝桥杯_算法训练_A+B Problem

    问题描述 输入A,B. 输出A+B. 输入格式 输入包含两个整数A,B,用一个空格分隔. 输出格式 输出一个整数,表示A+B的值. 样例输入 样例输出 数据规模和约定 -,,,<=A,B< ...

随机推荐

  1. java中mysql查询报错java.sql.SQLException: Before start of result set

    异常:java.sql.SQLException: Before start of result set 解决方法:使用rs.getString();前一定要加上rs.next(); sm = con ...

  2. paloalto防火墙版本升级

    1.准备工作:此部分不影响生产环境,可直接操作. 1)备份: 2)下载OS HA情况下,在主机下载完成后,选择 Sync To Peer(同步到对端)同步到备机. 2.安装更新 1)在备机上选择安装 ...

  3. JVM深入理解

    JVM深入理解 一.JVM介绍 JVM应用百度百科的原话是: JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过 ...

  4. TreeView的三种状态,全选,全不选,半选中

    我知道的设置treeview节点的三种状态,如果不是买的控件,那么通过代码,只能设置两种状态,我知道的有三种方法, 第一种是重写treeview,第二种是把三种状态做成小图标,让节点复选框随着不同的状 ...

  5. 微信小程序登录流程

    小程序登录流程 参考 app.js需要做的 1,首先通过wx.login()拿到code,成功之后,发送数据,请求接口,把code发送给后端,换区openid,sessionKey,unionId,把 ...

  6. log4j 配置日志输出(log4j.properties)

    轉: https://blog.csdn.net/qq_29166327/article/details/80467593 一.入门log4j实例 1.1 下载解压log4j.jar(地址:http: ...

  7. Python内置的服务器的使用

    cd 到某一文件 Python内置的服务器: E:\myObject\office\netObject\new-gcms> python -m SimpleHTTPServer 8888 如果是 ...

  8. anaconda安装qt错误

    windows下miniconda2安装python3下的qt包报错 conda install qt ERROR conda.core.link:_execute_actions(330): An ...

  9. filter 全局和局部过滤器

    1,局部过滤器 2,全局过滤器 使用方法相同,在花括号中使用过滤器名或者v-bind中使用

  10. windows service 2008 R2 升级 sp1遇到的问题

    因为我的程序是以vs2015开发的,所以在在布署windows service 2008 R2 项目的时候报出 红框里的错,说明要安装.net framework4.6. 感觉so easy,下载一个 ...