其他分享
首页 > 其他分享> > 55 人见人爱A-B

55 人见人爱A-B

作者:互联网

问题描述 :

A和B是两个集合,A-B求的是两个集合的差,就是做集合的减法运算。(当然,大家都知道集合的定义,就是同一个集合中不会有两个相同的元素,这里还是提醒大家一下)呵呵,很简单吧?

 

输入说明 :

输入数据包含T个测试实例。

首先输入数字T,然后输入T组测试数据,每组输入数据占1行,每行数据的开始是2个整数n(0<=n<=100)和m(0<=m<=100),分别表示集合A和集合B的元素个数,然后紧跟着n+m个元素,前面n个元素属于集合A,其余的属于集合B. 每个元素为不超出int范围的整数,元素之间由一个空格隔开. 

 

输出说明 :

针对每组数据输出一行数据,表示A-B的结果,如果结果为空集合,则输出“NULL”,否则从小到大输出结果,为了简化问题,每个元素后面跟一个空格.

 

输入范例 :

2
3 3 1 2 3 1 4 7
3 7 2 5 8 2 3 4 5 6 7 8

输出范例 :

2 3
NULL

思想:这题想法好想,写起来比较复杂。还有个坑,不用处理末尾空格。

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int num, i, j, k, t, y,c;
    scanf("%d", &num);
    int an, bn;
    int flag = 1;
    for (c = 0; c < num; c++)
    {
        int notnull = 0;
        scanf("%d %d", &an, &bn);
        int a[an];
        int b[bn];
        int res[an];
        int s = 0;
        for (i = 0; i < an; i++)
        {
            scanf("%d", &a[i]);
        }
        for (j = 0; j < bn; j++)
        {
            scanf("%d", &b[j]);
        }
        for (i = 0; i < an; i++)
        {
            flag = 1;
            for (j = 0; j < bn; j++)
            {
                if (a[i] == b[j])
                {
                    flag = 0;
                    break;
                }
            }
            if (flag == 1)
            {
                notnull = 1;
                res[s++] = a[i];
            }
        }
        if (notnull == 0)
        {
            printf("NULL\n");
        }
        else
        {
            for (k = 0; k < s-1; k++) // n个数排序,只用进行n-1趟
            {
                for (y = 0; y < s-1; y++) //从第1位开始比较直到最后一个尚未归位的数,想一想为什么到n-i就可以了。
                {
                    if (res[y] > res[y + 1]) //比较大小并交换
                    {
                        t = res[y];
                        res[y] = res[y + 1];
                        res[y + 1] = t;
                    }
                }
            }
            for (i = 0; i < s; i++){
                printf("%d ", res[i]);
            }
            printf("\n");
        }
    }

    return 0;
}

 

标签:55,res,bn,++,人见人爱,int,flag,scanf
来源: https://www.cnblogs.com/End1ess/p/15966419.html