杭电acm2034 C语言写法每组输入数据占1行,每行数据的开始是2个整数n(0

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/11 04:40:20
杭电acm2034 C语言写法每组输入数据占1行,每行数据的开始是2个整数n(0

杭电acm2034 C语言写法每组输入数据占1行,每行数据的开始是2个整数n(0
杭电acm2034 C语言写法
每组输入数据占1行,每行数据的开始是2个整数n(0

杭电acm2034 C语言写法每组输入数据占1行,每行数据的开始是2个整数n(0
首先对两个数组(用数组储存集合)分别排序,然后对于第一个集合中的每个元素,用二分搜索在第二个集合中查找,如果找不到,则输出,如果所有元素都能在第二个集合中被找到,则输出NULL
#include
#include
int cmp(const void *a,const void *b)
{
return(*(int *)a - *(int *)b);
}
int numeric (const void *p1,const void *p2)
{
return(*(int *)p1 - *(int *)p2);
}
int main()
{
int m,n,i;
int arr1[100],arr2[100];
while(1)
{
char flag = 0;
scanf("%d%d",&m,&n);
if(m == 0 && n == 0)break;
for(i = 0; i < m; i++)scanf("%d",&arr1[i]);
for(i = 0; i < n; i++)scanf("%d",&arr2[i]);
qsort(arr2,n,sizeof(int),cmp);
qsort(arr1,m,sizeof(int),cmp);
for(i = 0; i < m; i++)
{
if(!bsearch(&arr1[i],arr2,n,sizeof(int),numeric))
{
printf("%d ",arr1[i]);
flag = 1;
}
}
if(!flag)printf("NULL");
printf("\n");
}
return(0);
}