练习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
分析:根据题意,有两个整型数组,需要输出不共有的数字并且要去重。因此,将该题划为两个部分,第一,先分别用两个循环依次找出两个数组中不共有的数字并将其存入第三个数组c[ ]中,最后从c中输出结果;第二,在第一部分的基础上加入判断,判断不共有的数字在c中是否已经存在,若已经存在,则继续判断下一个,若不存在,则存入。
代码:
#include<stdio.h>
int main()
{ //输入第一个数组
int M;
scanf("%d",&M);
int a[M];
for(int i=0;i<M;i++)
{
scanf("%d",&a[i]);
}
//输入第二个数组
int N;
scanf("%d",&N);
int b[N];
for(int i=0;i<N;i++)
{
scanf("%d",&b[i]);
}
//定义第三个数组,k为长度
int c[100];
int k=0;
//第一个循环,用a[]每一个值去和b[]进行比较
for(int i=0;i<M;i++)
{
int flag=0;//判断c[]中是否有a[i],目的去重
int count=0;//判断b[]中是否有a[i]
for(int j=0;j<N;j++)
{
if(a[i] == b[j]){
count++;
}
}
if(count == 0){
for(int m=0;m<k;m++){
if(c[m] == a[i]){
flag++;
}
}
if(flag == 0){ //判断c[]中是否有a[i],目的去重
c[k] = a[i];
k++;
}
}
}
//同第一个循环
for(int i=0;i<N;i++)
{
int flag=0;
int count=0;
for(int j=0;j<M;j++)
{
if(b[i] == a[j]){
count++;
}
}
if(count == 0){
for(int m=0;m<k;m++){
if(c[m] == b[i]){
flag++;
}
}
if(flag == 0){
c[k] = b[i];
k++;
}
}
}
//输出结果
printf("%d",c[0]);
for(int i=1;i<k;i++)
{
printf(" %d",c[i]);
}
printf("\n");
return 0;
}