两个集合的差
2016-04-03 19:00
344 查看
题目出自杭电HDU
集合的差:以属于A而不属于B的元素为元素的集合称为A与B的差集,即找出A中有的,而B中没的。
思路:
1.对输入的A,B集合进行集合内排序.
2.A的元素a1依次与B中比a小的元素比较。
3.若B中没有元素与a1相等,则累加标记变量f,并把a1输出.
4.进行a1元素的下一个元素a2与B中比a2小的元素比较。。。一直到 the last。
5.f为0,输出NULL~~~~~game over。
上代码
写在最后:
1. qsort函数是个好东西。
最喜欢cmp函数可以随自己的定义了⊙▽⊙
可以对一维数组,二维数组,对字符串,对结构体中某个关键字,对结构体中多个关键字,对结构体中字符串进行升(降)序排序,and计算几何中求凸包的Comp(虽然还没看懂最后一个-。-)
2. 刚学会这种写法 for(i = 0; i < n; scanf(“%d”, &a[i++]));
3. 本文参考自博客园
集合的差:以属于A而不属于B的元素为元素的集合称为A与B的差集,即找出A中有的,而B中没的。
思路:
1.对输入的A,B集合进行集合内排序.
2.A的元素a1依次与B中比a小的元素比较。
3.若B中没有元素与a1相等,则累加标记变量f,并把a1输出.
4.进行a1元素的下一个元素a2与B中比a2小的元素比较。。。一直到 the last。
5.f为0,输出NULL~~~~~game over。
上代码
#include<stdio.h> #include<stdlib.h> int cmp(const void * a, const void * b) //从小到大排序 { return *(int *)a - *(int *)b; } int main() { int n, m, a[128], b[128], i, j, f; while(scanf("%d %d", &n, &m), (n || m)) { for(i = 0; i < n; scanf("%d", &a[i++])); for(i = 0; i < m; scanf("%d", &b[i++])); qsort(a, n, sizeof(int), cmp); qsort(b, n, sizeof(int), cmp); for(f = i = j = 0; i < n; i++) { for(; j < m && a[i] > b[j]; j++); if(j < m && a[i] == b[j]) continue; printf("%d ", a[i]); f++; } if(!f) printf("NULL"); putchar('\n'); } return 0; }
写在最后:
1. qsort函数是个好东西。
最喜欢cmp函数可以随自己的定义了⊙▽⊙
可以对一维数组,二维数组,对字符串,对结构体中某个关键字,对结构体中多个关键字,对结构体中字符串进行升(降)序排序,and计算几何中求凸包的Comp(虽然还没看懂最后一个-。-)
2. 刚学会这种写法 for(i = 0; i < n; scanf(“%d”, &a[i++]));
3. 本文参考自博客园
相关文章推荐
- 互联网公司GitHub repo 语言使用情况
- 20145320 《Java程序设计》第5周学习总结
- js+json实现ajax实例
- 《Linux内核与分析》第六周
- 229. Majority Element II
- 关于swift中函数的定义
- HTML 兼容性
- 关于Android studio 2.0beta5最近提示的Plugin is too old
- Neville算法
- Ubuntu14下cuda-7.5、tensorflow安装(enabling cuda 3.0)
- 在路上
- CentOS 6.5安装TortoiseSVN svn client
- 20145319 第五周学习总结
- 分析Linux内核创建一个新进程的过程
- csdn 要突破 千里之外 的称号需要多少积分或则排名
- leetcode——100—— Same Tree
- 数学记录
- 【Vim】使用Vundle管理配置Vim基本插件
- lintcode-medium-Palindrome Partition II
- 求数组最大子序列的和