输入包含两行。
第一行表示集合A,该行的第一个数n是集合A的大小,随后有n个空格分开的整数,均为集合A的元素。
第二行表示集合B,该行的第一个数m是集合B的大小,随后有m个空格分开的整数,均为集合B的元素。
保证各个集合中不会有重复的元素。
输出集合A和集合B的交集中的所有元素,用空格分开,元素输出的次序按在集合A中出现的次序。
如果交集为空,输出一空行。
3 100 200 300 4 400 300 210 100
100 300
//以判断flag是否变化来找到重复的元素
//这个便于理解
#include<stdio.h>
int main()
{
int m,n;
scanf("%d",&m);
int a[m];
int i;
for(i=0;i<m;i++)scanf("%d",&a[i]);
scanf("%d",&n);
int b[n];
for(i=0;i<n;i++)scanf("%d",&b[i]);
int j;
for(i=0;i<m;i++){
int flag=0;
for(j=0;j<n;j++){
if(a[i]==b[j]){
flag=1;
break;
}
}
if(flag==1)printf("%d ",a[i]);
}
return 0;
}
后面我又感觉可以用另一种方法来解决这个问题
#include<stdio.h>
struct List{
int elem[100];
int length;
}A,B;
void SqListCreate(struct List *S,int n){
int k;
(*S).length=n;
for(k=0;k<n;k++){
scanf("%d",&(*S).elem[k]);
}
}
int main()
{
struct List A,B;
int i,j,n;
scanf("%d",&n);
SqListCreate(&A,n);
scanf("%d",&n);
SqListCreate(&B,n);
for(i=0;i<A.length;i++){
for(j=0;j<B.length;j++){
if(A.elem[i]==B.elem[j]){
printf("%d ",A.elem[i]);
}
}
}
}
非常欢迎大家能在讨论区指出此文的不足处,作者会及时对文章加以修正 !如果有任何问题,欢迎评论,非常乐意为您解答!