也是很有意思的一题
不过当时好像也没费多少劲
#include<stdio.h>
int main() {
int t,i,k,j,n,m,x,y;
int A[120],B[120],R[120];
while(scanf("%d %d",&n,&m),n!=0||m!=0) {
for(i=0; i<n; i++)
scanf("%d",&A[i]);
for(i=0; i<m; i++)
scanf("%d",&B[i]);
j=y=0;
for(i=0; i<n; i++) {
x=0;
for(k=0; k<m; k++) {
if(A[i]==B[k])
x=1;
}
if(x==0) {
y=1;
R[j]=A[i];
j++;
}
}
if(y==1) {
for(i=0; i<j; i++) {
for(k=0; k<j; k++) {
if(R[i]<R[k]) {
t=R[i];
R[i]=R[k];
R[k]=t;
}
}
}
for(i=0; i<j; i++)
printf("%d ",R[i]);
printf("\n");
} else
printf("NULL\n");
}
return 0;
}
=======20160531补充=========
简化一下思路
每次对于集合A中的元素
查找集合B中是否有这一元素
如果有则无需输出
最后检查是否输出过元素
如果没有则为NULL
注意最后要求排序后输出
所以可以另开一数组记录
#include<stdio.h>
#include<algorithm>
using namespace std;
int a[120],b[120],res[120];
int main() {
int n,m;
while(scanf("%d %d",&n,&m),n||m) {
for(int i=0; i<n; i++)
scanf("%d",&a[i]);
for(int i=0; i<m; i++)
scanf("%d",&b[i]);
int cnt=0;
for(int i=0; i<n; i++) {
int j;
for(j=0; j<m; j++) {
if(b[j]==a[i]) {
break;
}
}
if(j>=m) {
res[cnt++]=a[i];
}
}
if(cnt==0)
printf("NULL");
else {
sort(res,res+cnt);
for(int i=0; i<cnt; i++)
printf("%d ",res[i]);
}
printf("\n");
}
return 0;
}
题目地址:【杭电】[2034]人见人爱A-B