http://acm.hdu.edu.cn/showproblem.php?pid=2034
求两个集合之差,其实就是排序后两个数组指针逐个跳过,相同时就跳过,不同时,如果前者小于后者,就保留前者,然后前者指针跳过,如果相反,就后者指针跳过就可以了
#include<stdio.h> #include<stdlib.h> int cmp(const void *a,const void *b) { return *(int *)a-*(int *)b; } int main() { int n,m,i,j,a[200],b[200],ans[200],k; while(scanf("%d%d",&n,&m)&&(n||m)) { k=0; for(i=0;i<n;i++) scanf("%d",&a[i]); for(i=0;i<m;i++) scanf("%d",&b[i]); qsort(a,n,sizeof(a[0]),cmp); qsort(b,m,sizeof(b[0]),cmp); j=0; i=0; while(j<m&&i<n) { if(a[i]==b[j]) { i++; j++; } else if(a[i]<b[j]) { ans[k++]=a[i++]; } else if(a[i]>b[j]) { j++; } } while(i<n) { ans[k++]=a[i++]; } if(k==0) printf("NULL"); else for(i=0;i<k;i++) printf("%d ",ans[i]); printf("\n"); } return 0; }