练习7-4 找出不是两个数组共有的元素 (20 分)

给定两个整型数组,本题要求找出不是两者共有的元素。

输入格式:

输入分别在两行中给出两个整型数组,每行先给出正整数N(≤20),随后是N个整数,其间以空格分隔。

输出格式:

在一行中按照数字给出的顺序输出不是两数组共有的元素,数字间以空格分隔,但行末不得有多余的空格。题目保证至少存在一个这样的数字。同一数字不重复输出。

输入样例:


10 3 -5 2 8 0 3 5 -15 9 100
11 6 4 8 2 6 -5 9 0 100 8 1


输出样例:


3 5 -15 6 4 1


要比较两次  

第一排的数据和第二排的数据两两比较

比较之后  得到数据可能会重复  需要再剔除那些重复的数据

剔除的方法

printf("%d",c[0]);
for(int i=1;i<k;i++){
int flag=1;
for(int j=0;j<i;j++){
if(c[j]==c[i])
flag=0;
}
if(flag==1){
printf(" %d",c[i]);
}

}

即 设置一个flag 每外轮将flag初始化为1,当c[j]==c[i]时就将flag转为0

当没有相同的元素的时候 flag则还是为1,则就直接输出

不为flag的意思就是该点前面有元素和它相同  //j<i  即控制这个

另外一种剔除方法

printf("%d",c[0]);
for(int i=1;i<k;i++){
int flag=1;
for(int j=0;j<i;j++){
if(c[j]==c[i])
flag=0;
}
if(flag==0){
continue;
}
printf(" %d",c[i]);
}

即对continue的理解与运用

直接上代码吧

在编写的时候 对我帮助最大的是  调试功能 方便我去查找我的逻辑错误 

#include<stdio.h>
int main(){
int n,m;
int c[20],k=0;
scanf("%d",&n);
int a[n];
for(int i=0;i<n;i++){
scanf("%d",&a[i]);
}
scanf("%d",&m);
int b[m];
for(int i=0;i<m;i++){
scanf("%d",&b[i]);
}
int t=0;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(a[i]==b[j]){
t++;
}
t++;

}
// printf("t %d\n",t);
if(t==m){
t=0;
c[k]=a[i];
// printf("up %d\n",c[k]);
k++;
}else{
t=0;
}
}

int y=0;
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
if(b[i]==a[j]){
y++;
}
y++;
}
// printf("y %d\n",y);
if(y==n){
y=0;
c[k]=b[i];
// printf("down %d\n",c[k]);
k++;
}else{
y=0;
}
}
// printf("k %d",k);
printf("%d",c[0]);
for(int i=1;i<k;i++){
int flag=1;
for(int j=0;j<i;j++){
if(c[j]==c[i])
flag=0;
}
if(flag==1){ //if(flag==0){
// continue;
printf(" %d",c[i]); //}
} //printf(" %d",c[i]);

}
}

虽然有点小长 但是 阅读起来还是不太难的