算法训练 集合运算
来源:互联网 发布:圣人不出门知天下事 编辑:程序博客网 时间:2024/06/15 05:50
算法训练 集合运算
时间限制:1.0s 内存限制:512.0MB
问题描述
给出两个整数集合A、B,求出他们的交集、并集以及B在A中的余集。
输入格式
第一行为一个整数n,表示集合A中的元素个数。
第二行有n个互不相同的用空格隔开的整数,表示集合A中的元素。
第三行为一个整数m,表示集合B中的元素个数。
第四行有m个互不相同的用空格隔开的整数,表示集合B中的元素。
集合中的所有元素均为int范围内的整数,n、m<=1000。
第二行有n个互不相同的用空格隔开的整数,表示集合A中的元素。
第三行为一个整数m,表示集合B中的元素个数。
第四行有m个互不相同的用空格隔开的整数,表示集合B中的元素。
集合中的所有元素均为int范围内的整数,n、m<=1000。
输出格式
第一行按从小到大的顺序输出A、B交集中的所有元素。
第二行按从小到大的顺序输出A、B并集中的所有元素。
第三行按从小到大的顺序输出B在A中的余集中的所有元素。
第二行按从小到大的顺序输出A、B并集中的所有元素。
第三行按从小到大的顺序输出B在A中的余集中的所有元素。
样例输入
5
1 2 3 4 5
5
2 4 6 8 10
1 2 3 4 5
5
2 4 6 8 10
样例输出
2 4
1 2 3 4 5 6 8 10
1 3 5
1 2 3 4 5 6 8 10
1 3 5
样例输入
4
1 2 3 4
3
5 6 7
1 2 3 4
3
5 6 7
样例输出
1 2 3 4 5 6 7
1 2 3 4
以前碰到这类题目,总是会跳过,是有点复杂,但是写出来并不是很难,这道题目要注意重复的情况,防止重复输出
说实话这样写的有点复杂了
后面粘上简化的更加明了的代码
#include <cstdio>#include <algorithm>using namespace std;int main(){int len_a,len_b;int a[1010],b[1010];scanf("%d",&len_a);for(int i=0;i<len_a;i++){scanf("%d",&a[i]);}scanf("%d",&len_b);for(int i=0;i<len_b;i++){scanf("%d",&b[i]);}sort(a,a+len_a);sort(b,b+len_b);int flag=0,i,j;for(i=0,j=0;i<len_a&&j<len_b;i++){if(i>0&&a[i]==a[i-1]){continue;}while(1){if(a[i]==b[j]){if(flag==0){printf("%d",a[i]); flag=1;}else{printf(" %d",a[i]);}j++;break;}else if(a[i]<b[j]){break;}else{j++;}}}printf("\n");flag=0;for(i=0,j=0;i<len_a&&j<len_b;i++){if(i>0&&a[i]==a[i-1]){continue;}while(1){if(a[i]==b[j]){if(flag==0){printf("%d",a[i]); flag=1;}else{printf(" %d",a[i]);}j++;while(b[j]==b[j-1]){j++;}break;}else if(a[i]<b[j]){if(flag==0){printf("%d",a[i]); flag=1;}else{printf(" %d",a[i]);}break;}else{if(flag==0){printf("%d",b[j]); flag=1;}else{printf(" %d",b[j]);}j++;while(b[j]==b[j-1]){j++;}}}}while(j<len_b){if(flag==0){printf("%d",b[j]);flag=1;}else{printf(" %d",b[j]);}j++;while(b[j]==b[j-1]&&j<len_b){j++;}}while(i<len_a){if(flag==0){printf("%d",a[i]);flag=1;}else{printf(" %d",a[i]);}i++;while(a[i]==a[i-1]&&i<len_a){i++;}}printf("\n");flag=0;for(i=0,j=0;i<len_a&&j<len_b;i++) { if(i>0&&a[i]==a[i-1]) { continue; } while(1) { if(a[i]==b[j]) { break; } else if(a[i]<b[j]) { if(flag==0) { printf("%d",a[i]); flag=1; break; } else { printf(" %d",a[i]); break; } } else { j++; } } } while(i<len_a) { if(flag==0) { printf("%d",a[i]); flag=1; } else { printf(" %d",a[i]); } i++; } printf("\n");return 0;}
好像也不是很简单
#include <cstdio>#include <algorithm>using namespace std;int main(){int len_a,len_b;int a[1010],b[1010];scanf("%d",&len_a);for(int i=0;i<len_a;i++){scanf("%d",&a[i]);}scanf("%d",&len_b);for(int i=0;i<len_b;i++){scanf("%d",&b[i]);}sort(a,a+len_a);sort(b,b+len_b);int flag=0,i=0,j=0;while(i<len_a&&j<len_b){while(i>0&&a[i]==a[i-1]&&i<len_a){i++;}while(j>0&&b[j]==b[j-1]&&j<len_b){j++;}if(a[i]==b[j]){if(flag==0){printf("%d",a[i]); flag=1;}else{printf(" %d",a[i]);} i++;j++;}else if(a[i]<b[j]){i++;}else{j++;}continue ;}printf("\n");flag=0;i=0;j=0;while(i<len_a&&j<len_b){if(i>0&&a[i]==a[i-1]&&i<len_a){i++;;}if(j>0&&b[j]==b[j-1]&&j<len_b){j++;;}if(a[i]==b[j]){if(flag==0){printf("%d",a[i]); flag=1;}else{printf(" %d",a[i]);}i++;j++;}else if(a[i]<b[j]){if(flag==0){printf("%d",a[i]); flag=1;}else{printf(" %d",a[i]);}i++;}else{if(flag==0){printf("%d",b[j]); flag=1;}else{printf(" %d",b[j]);}j++;}continue ;}while(j<len_b){if(flag==0){printf("%d",b[j]);flag=1;}else{printf(" %d",b[j]);}j++;while(b[j]==b[j-1]&&j<len_b){j++;}}while(i<len_a){if(flag==0){printf("%d",a[i]);flag=1;}else{printf(" %d",a[i]);}i++;while(a[i]==a[i-1]&&i<len_a){i++;}}printf("\n");flag=0;i=0;j=0;while(i<len_a&&j<len_b) { if(i>0&&a[i]==a[i-1]&&i<len_a) { i++; } if(j>0&&b[j]==b[j-1]&&j<len_b) { j++; } if(a[i]==b[j]) { i++; } else if(a[i]<b[j]) { if(flag==0) { printf("%d",a[i]); flag=1; } else { printf(" %d",a[i]); } i++; } else { j++; } continue; } while(i<len_a) { if(flag==0) { printf("%d",a[i]); flag=1; } else { printf(" %d",a[i]); } i++; } printf("\n");return 0;}
0 0
- 算法训练 集合运算
- 算法训练 集合运算
- 算法训练 集合运算
- 算法训练 集合运算
- 蓝桥杯 算法训练 集合运算
- 蓝桥杯_算法训练_ALGO10_集合运算
- 算法训练 P1103 复数运算
- 蓝桥杯 算法训练 复数运算
- 算法训练 P1103 【复数运算,指针】
- 蓝桥杯算法训练 P1103(复数运算)
- 设计集合的unique运算的算法
- stl常用算法_集合运算
- 算法训练 Lift and Throw (DFS && 位运算)
- 蓝桥杯练习系统算法训练——前缀表达式运算
- 集合运算
- 集合运算
- 集合运算
- 集合运算
- 安装Mysql后出现1045错误解决办法
- synchronized 和 volatile 比较
- OnSaveInstanceState的应用(Activity异常情况重新创建/屏幕旋转)
- 93. Restore IP Addresses -Medium
- Jasperreports6.3.1+Jaspersoft studio6.3.1进行报表开发实战教程(三)-传参模板设计
- 算法训练 集合运算
- ubuntu Redis 数据库远程访问服务
- 与客户交流培训产品使用经验积累
- HTML学习笔记
- HDU5985Lucky Coins 【数学题】
- 图的深度遍历
- Java基础部分(1)
- table切换
- 算法提高 Torry的困惑(提高型)