要求:
给定两个整型数组,本题要求找出不是两者共有的元素。
输入格式:
输入分别在两行中给出两个整型数组,每行先给出正整数N(≤20),随后是N个整数,其间以空格分隔。
输出格式:
在一行中按照数字给出的顺序输出不是两数组共有的元素,数字间以空格分隔,但行末不得有多余的空格。题目保证至少存在一个这样的数字。同一数字不重复输出。
代码(devcpp)
#include<stdio.h>
int main(){
int M,N;
scanf("%d",&M);
int a[M];
for(int i=0;i<M;i++){
scanf("%d",&a[i]);
} //a数组输入M个数
scanf("%d",&N);
int b[N],j,t;
for(int i=0;i<N;i++){
scanf("%d",&b[i]);
} //b数组输入N个数
int mark=0;
for(int i=0;i<M;i++){ //在a数组数中遍历排除
for(j=0;j<i;j++){ //遍历排除a数组相同数字
if(a[i]==a[j]){
break;
}
}//循环终止,无相同数字,但j+1,a[i]==a[j]
if(j==i){
j--;//上面循环终止,j--,防止满足a[i]==a[j];
}
if(a[i]==a[j]){
continue;
}
for(t=0;t<N;t++){ //对比a[i]数字和b数组的数
if(a[i]==b[t]){
break;
}
}
if(t==N){
t--;//N超出数组范围,t--
}
if(a[i]==b[t]){
continue;
}
if(mark==1){
printf(" %d",a[i]);
}
else{
printf("%d",a[i]);
}
mark=1;
}
for(int i=0;i<N;i++){ //在b数组中遍历,和在a数组遍历步骤相同
for(j=0;j<i;j++){
if(b[i]==b[j]){
break;
}
}
if(i==j){
j--;
}
if(b[i]==b[j]){
continue;
}
for(t=0;t<M;t++){
if(b[i]==a[t]){
break;
}
}
if(t==M){
t--;
}
if(b[i]==a[t]){
continue;
}
if(mark==0){
printf("%d",b[i]);
}
if(mark==1){
printf(" %d",b[i]);
}
mark=1;
}
return 0;
}
时刻注意变量难以发现的变化。例如循环中有有条件的break,在循环过程中break,i不会在结束后加一;但如果循环终止都没满足条件,i会加一,和预期不符。