思路:
- 找出a,b两数组相同的元素,并且放入数组c中(common);
- 循环a数组的元素,查询a数组元素是否在交集数组c中,返回tag数值;
- 如果a数组的元素不在交集数组中,循环结果数组r(result),查询此元素是否在结果数组r中重复,返回flag数值;
- 如果在结果数组中不重复,加入结果数组中,同时结果数组动态增长;
- 对b数组依次完成上述2~4步奏;
- 打印结果数组。
#include <stdio.h>
#include <string.h>
int main(){
int a[21]={0},b[21]={0},c[21]={0},r[21]={0},k=0,p=0;
int m,n,tag,flag;
scanf("%d",&m);
for(int j=0;j<m;j++){
scanf("%d",&a[j]);
}
scanf("%d",&n);
for(int j=0;j<n;j++){
scanf("%d",&b[j]);
}
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
if(a[i]==b[j]){
c[k++]=a[i];
break;
}
}
}
for(int i=0;i<m;i++){
tag=1;
for(int j=0;j<k;j++){ //a数组当前元素是否在交集数组中
if(a[i]==c[j]){
tag=0;
break;
}
}
if(tag){ //当前元素不在交集数组中
flag=1;
for(int v=0;v<p;v++){ //当前元素是否在结果数组中重复
if(a[i]==r[v]){
flag=0;
break;
}
}
if(flag){ //如果在结果数组中不重复
r[p++]=a[i];
}
}
}
for(int i=0;i<n;i++){
tag=1;
for(int j=0;j<k;j++){
if(b[i]==c[j]){
tag=0;
break;
}
}
if(tag){
flag=1;
for(int v=0;v<p;v++){
if(b[i]==r[v]){
flag=0;
break;
}
}
if(flag){
r[p++]=b[i];
}
}
}
// for(int j=0;j<k;j++){ //此处代码人工检测交集数组是否正确
// if(j==0)
// printf("%d",c[j]);
// else
// printf(" %d",c[j]);
// }
// printf("\n");
for(int j=0;j<p;j++){
if(j==0)
printf("%d",r[j]);
else
printf(" %d",r[j]);
}
printf("\n");
return 0;
}
优化:
在实现过程中多次循环判断是否在交集数组或者结果数组中重复,可以构建repeat( )函数进行判断;