PTA练习7-4 找出不是两个数组共有的元素
给定两个整型数组,本题要求找出不是两者共有的元素。
输入格式:
输入分别在两行中给出两个整型数组,每行先给出正整数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(void)
{
int n,m;
int a[20]={0};
int b[20]={0};
int c1[20]={0};
int c2[20]={0};
int i,j,k;
int sign;
int ctn1,ctn2,len1,len2;
ctn1=ctn2=len1=len2=0;
//分别输入两个整形数组的元素
scanf("%d",&n);
for(i=0;i<n;i++) {
scanf("%d",&a[i]);
}
scanf("%d",&m);
for(j=0;j<m;j++) {
scanf("%d",&b[j]);
}
//用嵌套的for循环,先遍历a数组,后遍历b数组,找出a数组中有,而b数组中没有的元素。
for(i=0;i<n;i++) {
//每次循环开始将sign赋值为1,默认a数组元素和b数组元素都不相同
sign=1;
for(j=0;j<m;j++) {
//如果b数组中含有a数组中的数,如果有就将sign赋值为0
if(a[i]==b[j]) {
sign=0;
break;
}
}
//如果sign为1,则此时的a[i}仅为a数组所有 ,将其放入新的c1数组中。
if(sign==1 && ctn1==0) { //如果ctn1为1,则说明c1数组还没有放入a、b梁数组中非共有的元素,此时直接将a[i]放入即可
c1[ctn1]=a[i];
ctn1++;
len1=ctn1;
// 如果ctn1大于0,则已经在c1数组中放入了元素,则需要用循环比较,看是否需要去重
}else if(sign==1 && ctn1!=0) {
for(k=0;k<len1;k++) {
if(c1[k]!=a[i]) {
c1[ctn1]=a[i];
ctn1++;
}
}
}
}
//这里的嵌套for循环道理同上,改一下参数即可
for(j=0;j<m;j++) {
sign=1;
for(i=0;i<n;i++) {
if(a[i]==b[j]) {
sign=0;
break;
}
}
if(sign==1 && ctn2==0) {
c2[ctn2]=b[j];
ctn2++;
len2=ctn2;
}else if(sign==1 && ctn2!=0) {
for(k=0;k<len2;k++) {
if(c2[k]!=b[j]) {
c2[ctn2]=b[j];
ctn2++;
}
}
}
}
//经历了上述步骤之后,分别输出c1、c2数组即可。在输出c2的时候要注意数组最后一个元素后没有空格,需要判断
for(i=0;i<ctn1;i++) {
printf("%d ",c1[i]);
}
for(i=0;i<ctn2;i++) {
if(i<ctn2-1) {
printf("%d ",c2[i]);
}else {
printf("%d",c2[i]);
}
}
return 0;
}```