两个集合的差

题目出自杭电HDU
两个集合的差_第1张图片
集合的差:以属于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. 本文参考自博客园

你可能感兴趣的:(杭电)