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

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

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

 #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. [原创]自定义参数静默方式安装JDK1.8

    摘要:当Java桌面程序开发完成做产品的时候,面对未知的安装环境,通常是编写一些预安装检测脚本/程序,让程序傻瓜化安装以便减少分发出去的产品带来 的未知工作量(安装答疑,操作系统问题引起安装失败等), ...

  2. ionic3问题记录

    1.Ionic3 websocket 启动没问题,编译的时候报错 events.js:136thrower;// Unhandled 'error' event^Error: read ECONNRE ...

  3. Oracle 12导出、导入数据

    Precondition: complete the work described in Oracle 12 创建新的数据库实例.用户 1. export data under user " ...

  4. How to use BMW 35080 adapter with Yanhua Mini ACDP

    I have a question about Yanhua Mini ACDP + module 4 BMW 35080 read and write: Can the 35080 adapter ...

  5. Lonsdor K518ISE SCION 2011-2018 Models Enabled!

    Lonsdor released the Lonsdor K518ISE Key Programmer update announcement on 14-03-2019, saying it can ...

  6. pip更换源

    #mkdir ~/.pipcd .pipvi pip.conf [global]trusted-host =  pypi.tuna.tsinghua.edu.cnindex-url = https:/ ...

  7. linux学习第十六天 (Linux就该这么学)

    今生讲了邮件的产生和解决和实际问题,把前两天的和这节邮箱系统统一布置,又统一复习和学习了一下,

  8. NOVO SOP (SOP简介及历史)

    SOP(Standard Operation Procedure),标准作业程序. 一.什么是SOP(标准作业程序) 所谓SOP,是 Standard Operation Procedure三个单词中 ...

  9. 获取父窗口的xxx节点的方法

    window.parent.document.getElementById("xxx");获取父窗口的xxx节点$("#myEle", window.paren ...

  10. 笔记本电脑连接wifi,同时提供热点wifi给手机使用

    笔记本电脑连接wifi,同时提供热点wifi给手机使用 用电脑建立WiFi供手机平板设备使用ps:电脑需要有无线网卡,一般笔记本都自带 此教程仅适用Windows 7 & 8,1.打开笔记本的 ...