2019-05-15

2034题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2034



这道题是我昨天晚上做的,看到集合就想到是高中的知识,无奈这知识距离现在好像有点久远,集合的计算基本上已经不记得了。一开始以为{1,2,3}-{1,4,7}会等于{0,-2,-4},不过看了Sample Output 的答案是{2,3}。我一脸疑惑,不知道这个结果是如何得到的。于是查询了百度去看看集合的减法是如何运算的。也就是说{1,2,3}-{1,4,7}前一个集合的每一个数,都会寻找后面集合里面相同的数,比如前一个集合的“1”,找到后面的{1,4,7}中的1,减掉。剩下{2,3},然后2,3分别又找后面集合的数,没有一样,就保存下来。就是{1,2,3}-{1,4,7}={2,3}。

如果反过来是{1,4,7}-{1,2,3}={4,7}。如果前一个集合的元素都被抵消掉的话,那么输出NULL 。理清思路之后就可以开始做题了。

代码如下:

# include

# include

# include

# include

using namespace std;

# define MAX 100

int a[MAX];

int b[MAX];

int n1,n2;

int main()

{

    memset(a,0,sizeof(a));

    memset(b,0,sizeof(b));

    while ( cin>>n1>>n2 )

    {

        int sum = 0;

        if ( n1==0&&n2==0 )

            break;

        for ( int i = 0;i < n1;i++ )cin>>a[i];

        for ( int j = 0;j < n2;j++ )cin>>b[j];

        for ( int i = 0;i < n1;i++ )

        {

            for ( int j = 0;j < n2;j++ )

            {

                if ( a[i]==b[j] )

                        {

                            a[i] = -32769;//反正不让a[i]等于平时常见的数。

                            sum++;

                        }

            }

        }

        if ( sum == n1 )

            cout<<"NULL"<

        else

        {

            sort(a,a+n1);

            for ( int i = sum;i < n1;i++ )

            {

                    cout<

            }

            cout<

        }

    }

    return 0;

}

这个代码是我第一次用C++来实现。

# include提供输入输出流。# include提供了sort(first,last)快排排序。 memset(a,0,sizeof(a))作用将数组全部清0。第一次用c++不太熟练,很多东西还是不太懂,需要看下书才能用一下。希望之后的做题都尽量用c++来完成。

你可能感兴趣的:(2019-05-15)