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<cstdio>
# include<iostream>
# include<algorithm>
# include<cstring>
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"<<endl;
else
{
sort(a,a+n1);
for ( int i = sum;i < n1;i++ )
{
cout<<a[i]<<" ";
}
cout<<endl;
}
}
return 0;
}
这个代码是我第一次用C++来实现。
# include<iostream>提供输入输出流。# include<algorithm>提供了sort(first,last)快排排序。 memset(a,0,sizeof(a))作用将数组全部清0。第一次用c++不太熟练,很多东西还是不太懂,需要看下书才能用一下。希望之后的做题都尽量用c++来完成。