蓝桥杯_算法训练_ALGO10_集合运算


这个题实际上思路是比较简单的,但是需要注意细节问题。
思路:读入数组之后进行排序,然后再求交、并、补集。
首先排序:(使用的是冒泡排序)
#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_集合运算的更多相关文章
- ALGO-10_蓝桥杯_算法训练_集合运算(排序)
问题描述 给出两个整数集合A.B,求出他们的交集.并集以及B在A中的余集. 输入格式 第一行为一个整数n,表示集合A中的元素个数. 第二行有n个互不相同的用空格隔开的整数,表示集合A中的元素. 第三行 ...
- ALGO-115_蓝桥杯_算法训练_和为T(枚举)
问题描述 从一个大小为n的整数集中选取一些元素,使得它们的和等于给定的值T.每个元素限选一次,不能一个都不选. 输入格式 第一行一个正整数n,表示整数集内元素的个数. 第二行n个整数,用空格隔开. 第 ...
- ALGO-143_蓝桥杯_算法训练_字符串变换
问题描述 相信经过这个学期的编程训练,大家对于字符串的操作已经掌握的相当熟练了.今天,徐老师想测试一下大家对于字符串操作的掌握情况.徐老师自己定义了1,,,,5这5个参数分别指代不同的5种字符串操作, ...
- ALGO-27_蓝桥杯_算法训练_FBI树(树,递归)
问题描述 我们可以把由“”和“”组成的字符串分为三类:全“”串称为B串,全“”串称为I串,既含“”又含“”的串则称为F串. FBI树是一种二叉树,它的结点类型也包括F结点,B结点和I结点三种.由一个长 ...
- ALGO-6_蓝桥杯_算法训练_安慰奶牛
记: 本题目考的是最小生成数,可使用Kruskal算法 第一次,20分 原因:使用动态数组,有概率报运行错误(大雾= =) 第二次,100分 原因:改用静态数组,一次过 示例代码: #include ...
- ALGO-5_蓝桥杯_算法训练_最短路
记: 一开始没接触过关于最短距离的算法,便开始翻阅关于图的知识, 得知关于最短距离的算法有Dijkstra算法(堆优化暂未看懂),Bellman-Ford算法,Floyd算法,SPFA算法. 由于数据 ...
- 蓝桥杯_算法训练_Torry的困惑(基本型)
这个题目就是求质数的乘积,在加一个模,思路比较简单,直接上代码: #include<iostream> using namespace std; bool isPrime(int a) { ...
- 蓝桥杯_算法训练_区间k大数查询
问题描述 给定一个序列,每次询问序列中第l个数到第r个数中第K大的数是哪个. 输入格式 第一行包含一个数n,表示序列长度. 第二行包含n个正整数,表示给定的序列. 第三个包含一个正整数m,表示询问个数 ...
- ALGO-43_蓝桥杯_算法训练_A+B Problem
问题描述 输入A,B. 输出A+B. 输入格式 输入包含两个整数A,B,用一个空格分隔. 输出格式 输出一个整数,表示A+B的值. 样例输入 样例输出 数据规模和约定 -,,,<=A,B< ...
随机推荐
- webpack多入口优化
最近接手的项目是公司之前搭的多页面应用脚手架,然后到现在入口页面大大小小超过半百了,然后每次更新完配置之后,重启页面就贼拉卡,实在太影响开发效率了,于是开始优化呗. 最开始发现如果你想要让加载速度变快 ...
- Centos 7 Ntop 流量分析 安装
Centos 6 安装 Ntop:https://www.cnblogs.com/weijie0717/p/4886314.html 一.安装 1.添加EPEL 仓库 # yum install ep ...
- 我在Python学习中遇到的问题一
开发工具:PyCharm 系统:macOs Serria 10.12.4 jetbrains出品,作为和idea一个公司的兄弟产品,延续了idea的易用性,并且操作按钮也基本一致 一. 执行环境问题 ...
- Python基础-函数(六)
一.函数介绍 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率.Python提供了许多内建函数,比如print().但你也可以自己创建函数 ...
- IDEA中,将项目加入maven管理。
在项目上右键->Add Framework Support Choose Maven 生成pom.xml 在<project>下配置国内仓库 <properties>&l ...
- linux上安装MongoDB副本集(带keyfile安全认证以及用户权限)
搭建前准备 MongoDB版本:4.0 主要参考搭建MongoDB副本集网站:https://www.jianshu.com/p/f021f1f3c60b 安装之前最好先确定一下几点: 防火墙关闭 M ...
- Ruby http/net 中连接超时问题
下面在调用币安的接口时,经常会卡住,设置连接超时也不会抛出异常,代码如下(默认连接超时为nil, 参考:https://github.com/ruby/ruby/pull/269): require ...
- 安卓学习 intent
其实学习了好几个星期了,是看老罗的视频,但进度太慢 今天 换了一本书 Intent 切换页面 啊啊啊啊 CompentName comp=new CompentName(MainActivity.th ...
- 分析easyswoole3.0源码,consoleTcpService(六)
前文讲过可以通过配置开启一个tcp服务,叫做consoleTcpservice.EasySwoole\EasySwoole\Core::83行 (new TcpService(Config::getI ...
- 判断作业完成之 读取log 脚本
tail 用于读取文件末尾 -n 后边加行数 -f 为持续追踪,实时输出 NUMECA 输出最后两行 ...done in 727.84-sec (STARTING NUMECA FLOW SOLVE ...