给定两个整型数组,本题要求找出不是两者共有的元素。
输入格式:
输入分别在两行中给出两个整型数组,每行先给出正整数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
该题的思路并不麻烦,关键在于输出的时候要满足一些要求,所以导致注意点比较多。
我的思路为将第一个数组中的数在数组二中依次排查,找到不同的数就直接输出!其中需要注意重复的数,需要进行一个循环处理。然后再将第二个数组中的数与数组一进行一次排查,方法都是一个样子。下边就是我的代码和注释,代码虽然很长,但是思路其实很简单,属于是偏向暴力输出了!
#include<stdio.h>
int main(){
int n,m,n1[21],m1[21],c=0,count=0,c1=0;
scanf("%d",&n);//先进行正常输出
for(int i=0;i<n;i++)
scanf("%d",&n1[i]);
scanf("%d",&m);
for(int i=0;i<m;i++)
scanf("%d",&m1[i]);
for(int i=0;i<n;i++){//第一个循环和第二个循环查找的是第二个数组中与第一个数组中重复的数
c1=0;//设置c1用来判断该值在第二个数组中是否有相同的值
for(int j=0;j<m;j++){//
c=0;//设置c用来判断第一个数组中是否有重复的数
for(int k=0;k<=i+1;k++)//这个循环就是用来判断一个数组中是否重复。
//又因为测试点一要求,第一次重复的数先输出,第二次不输出,所以需要向前进行判断
if(n1[i]==n1[k]&&i!=k) {//这里必须要求不等于本身,不然程序会出BUG
c=1;//c=1表示有重复的值,就跳出
break;
}
if(c==1) {//有重复的值跳出,并将c1判为1,也跳出
c1=1;
break;
}
else if(n1[i]==m1[j]){//如果第一个数组中正在进行查找的数没重复,那就让该数与数组之间的判断
c1=1;//如果正在查找的数在第二个数组中有相同的数就跳出
break;
}
}
if(c1!=1) {//如果c1=1说明该数不满足要求,就进行下次循环。如果不相同就进行输出!
if(count++==0) printf("%d",n1[i]);//由于题目输出要求,因此空格处需要额外设置一个条件,仅仅第一次不跟空格
else printf(" %d",n1[i]);
}
}//第一次大循环是判断数组一中的数在数组二中的情况,下个循环就是反过来,判断数组二,两次循环一模一样!
for(int i=0;i<m;i++){
c1=0;
for(int j=0;j<n;j++){
c=0;
for(int k=0;k<=i+1;k++)
if(m1[i]==m1[k]&&i!=k) {
c=1;
break;
}
if(c==1) {
c1=1;
break;
}
else if(m1[i]==n1[j]){
c1=1;
break;
}
}
if(c1!=1) {
if(count++==0) printf("%d",m1[i]);
else printf(" %d",m1[i]);
}
}
}