HDU 2034 人见人爱AB

人见人爱A-B

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 21648    Accepted Submission(s): 6035


Problem Description
参加过上个月月赛的同学一定还记得其中的一个最简单的题目,就是{A}+{B},那个题目求的是两个集合的并集,今天我们这个A-B求的是两个集合的差,就是做集合的减法运算。(当然,大家都知道集合的定义,就是同一个集合中不会有两个相同的元素,这里还是提醒大家一下)

呵呵,很简单吧?
 
Input
每组输入数据占1行,每行数据的开始是2个整数n(0<=n<=100)和m(0<=m<=100),分别表示集合A和集合B的元素个数,然后紧跟着n+m个元素,前面n个元素属于集合A,其余的属于集合B. 每个元素为不超出int范围的整数,元素之间有一个空格隔开.
如果n=0并且m=0表示输入的结束,不做处理。
 
Output
针对每组数据输出一行数据,表示A-B的结果,如果结果为空集合,则输出“NULL”,否则从小到大输出结果,为了简化问题,每个元素后面跟一个空格.
 
Sample Input
3 3 1 2 3 1 4 7 3 7 2 5 8 2 3 4 5 6 7 8 0 0
 
Sample Output
2 3 NULL
 
 
 
 
先把A集合排序,然后对于每个元素,如果B集合中有该元素的话就不用输出。
 
 
 
新的换行方式:puts("");
 
 
 
 
 
View Code
 1 #include<stdio.h>
2 #include<string.h>
3 #include<stdlib.h>
4 int cmp(const void* a,const void* b)
5 {
6 return *(int*)a - *(int*)b;
7 }
8 int main()
9 {
10 int n,m,i,a[220],b[220],j,flag,flag1;
11 while(scanf("%d%d",&n,&m)==2)
12 {
13 if(!m&&!n)
14 {
15 break;
16 }
17 for(i = 0;i < n; i++)
18 {
19 scanf("%d",&a[i]);
20 }
21 for(i = 0;i < m; i++)
22 {
23 scanf("%d",&b[i]);
24 }
25 qsort(a,n,sizeof(a[0]),cmp);//A集合从小到大排序
26 flag1 = 1;
27 for(i = 0;i < n; i++)//对于A集合的每个元素。
28 {
29 flag = 1;
30 for(j = 0;j < m;j++)//扫描B集合的元素。
31 {
32 if(a[i] == b[j])//如果有相同的话,就不用输出。
33 {
34 flag = 0;
35 break;
36 }
37 }
38 if(flag)
39 {
40 printf("%d ",a[i]);
41 flag1 = 0;
42 }
43 }
44 if (flag1)
45 {
46 printf("NULL");
47 }
48 puts("");
49 }
50 return 0;
51 }
原文地址:https://www.cnblogs.com/qiufeihai/p/2322170.html