小水题,杭电2034,人见人爱A-B
1 /***** HDOJ 2034 人间人爱A-B题 ********/ 2 3 /******** written by C_Shit_Hu ************/ 4 5 /****************************************************************************/ 6 /* 7 首先表示,这一题不是很水。。。至少比那个人见人爱的A+B,高级点。。。。 8 9 By the way :科普一下集合的减法 10 百度: 11 如集合A{1.2.3} 集合B{1.4.7}做减法运算的步骤和减法的结果为----> 12 -----其差是:以属于A而不属于B的元素为元素的集合称为A与B的差(集)A-B={2,3} 13 14 A-B求的是两个集合的差,就是做集合的减法运算。 15 16 每组输入数据占1行,每行数据的开始是2个整数n(0<=n<=100)和m(0<=m<=100),分别表示集合A和集合B的元素个数; 17 然后紧跟着n+m个元素-- 18 ----前面n个元素属于集合A,其余的属于集合B. 每个元素为不超出int范围的整数,元素之间有一个空格隔开。 19 如果n=0并且m=0表示输入的结束,不做处理。 20 21 针对每组数据输出一行数据,表示A-B的结果,如果结果为空集合,则输出“NULL”; 22 否则从小到大输出结果,为了简化问题,每个元素后面跟一个空格。 23 */ 24 /****************************************************************************/ 25 26 // 代码如下。。。。。表示还不是很水。 27 28 #include <stdio.h> 29 30 int main() 31 { 32 int n,m; // 定义变量,含义如题 33 34 while(scanf("%d%d",&n,&m)!=EOF&&!(n==0&&m==0)) // 输入语句,多个测试实例,且以0,0结束。 35 { 36 int i,j,t; // 此处的临时变量,i, j为循环变量,t为临时存储数据变量 37 int flag=0; // 标识变量 38 int a[101],b[101]; // a[]; b[]; 为存储两个集合的整型数组 39 int c[101]={0}; // c[]; 为用于存储集合的差的数组,此处的初始化,用memset(); 函数更合适和恰当。。 40 for(i=0;i<n;i++) 41 scanf("%d",&a[i]); 42 for(i=0;i<m;i++) 43 scanf("%d",&b[i]); // 从标准输入读入两个集合,并存入对应的的数组中 44 45 // 由于要求输出结果为从大到小,所以对A数组进行排序,用冒泡排序也可以。。。 46 for(i=1;i<n;i++) 47 { 48 t=a[i]; 49 for(j=i;j>0;j--) 50 { 51 if(t<a[j-1]) 52 a[j]=a[j-1]; 53 else 54 break; 55 } 56 a[j]=t; 57 } 58 59 for(i=0;i<n;i++) 60 { 61 for(j=0;j<m;j++) 62 if(a[i]==b[j]) 63 break; 64 if(j>=m) 65 c[flag++]=a[i]; 66 } // 用已经排好序的A数组的元素逐个与B数组的元素比较, 67 // 如有相等的,则是标致变量加一, 并将相等的数组元素存入数组C中 68 69 if(flag==0) 70 printf("NULL"); 71 else 72 { 73 for(i=0;i<flag;i++) 74 printf("%d ",c[i]); // 注意,此处不需要注意最后的末尾是否不含有空格,题目已经解释含有空格 75 } // 依据标识变量的值输出结果,NULL或者数组C。 76 printf("\n"); 77 } 78 79 return 0; 80 } 81 82 83 /******************************************************/ 84 /******************** 心得体会 **********************/ 85 /* 86 这道题目,除去集合的减法不知道外,其实还是蛮简单的。。 87 也就是水。。。。 88 只要把第一个数组排好序,然后依次找出两个数组中的相同的元素就可以了。 89 本代码用到的一个标示变量,这是一个需要谨记的技巧。 90 91 标识变量在本代码中的作用: 92 ①标示集合的减法结果是否为空 93 ②如不为空,则当做集合减法存放在数组的索引变量。 94 95 水水更健康!!! 96 */ 97 /******************************************************/