2034題目鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=2034
這道題是我昨天晚上做的钦无,看到集合就想到是高中的知識,無奈這知識距離現(xiàn)在好像有點(diǎn)久遠(yuǎn)慈格,集合的計算基本上已經(jīng)不記得了。一開始以為{1,2,3}-{1,4,7}會等于{0遥金,-2浴捆,-4},不過看了Sample Output 的答案是{2,3}稿械。我一臉疑惑选泻,不知道這個結(jié)果是如何得到的。于是查詢了百度去看看集合的減法是如何運(yùn)算的美莫。也就是說{1,2,3}-{1,4,7}前一個集合的每一個數(shù)页眯,都會尋找后面集合里面相同的數(shù),比如前一個集合的“1”厢呵,找到后面的{1,4,7}中的1窝撵,減掉。剩下{2,3}述吸,然后2忿族,3分別又找后面集合的數(shù),沒有一樣蝌矛,就保存下來。就是{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]等于平時常見的數(shù)。
? ? ? ? ? ? ? ? ? ? ? ? ? ? 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++來實現(xiàn)判哥。
# include<iostream>提供輸入輸出流献雅。# include<algorithm>提供了sort(first,last)快排排序。?memset(a,0,sizeof(a))作用將數(shù)組全部清0塌计。第一次用c++不太熟練挺身,很多東西還是不太懂,需要看下書才能用一下锌仅。希望之后的做題都盡量用c++來完成章钾。