给定两个整型数组,本题要求找出不是两者共有的元素。
输入格式:
输入分别在两行中给出两个整型数组,每行先给出正整数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
这题看着挺简单的,但做起来还是有点麻烦的。
主要思路:假设你已经输入了两个数组,那要找出不是两数组共有的数,就是找出a有b没有和b有 a没有的数,你就要先让a数组的数与b数组一个一个对比,如果没有一样的数,在判 断在a数组中该数之前的数有没有一样,没有,那这个数就是独一无二的。将这个数赋 给新建的数组x[ ].
举个例子:a[5]={3,6,6,5,8},b[3]={3,8,8}
比如说a数组中的第二位数字6,通过for循环可以很容易知道b数组不含6,再判断第二 位数字之前有没有一样的数,没有,所以这个6是独一无二的,而第三位数字6,因为 前面有个6,所以它不能算进去.
以下为原答案
#include <stdio.h>
int main (void)
{
int i,n,s1,s2,c,d;
int a[20],b[20];
//第一部分;输入
scanf ("%d",&i); //输入的数组a的长度i
if (i<0 || i>20)
{
return 0;
}
for (c=0;c<i;c++) //第一行数组a
{
scanf (" %d",&s1);
a[c]=s1;
}
scanf ("%d",&n); //输入的数组b的长度n
if (n<0 && n>20)
{
return 0;
}
for (d=0;d<n;d++) //第二行数组b
{
scanf (" %d",&s2);
b[d]=s2;
}
//第二部分,赋值
int x[20],p=0,v=0;
for (c=0;c<i;c++) //判断a有b没有的数
{
int num=0;
for (d=0;d<n;d++)
{
if (a[c]==b[d])
{
num=1;
break;
}
}
if (num==0) //当b数组没有一样的数时
{
int z=0;
if (c!=0) //判断数组内在该数之前有无一样的数,不能从第一项开始判断,从第二项开始,所以c不等于0.
{
for (int y=0;y<c;y++)
{
if (a[y]==a[c])
{
z=1;
break;
}
}
}
if (z==0) //当b数组和该数之前都没有一样的数时,将该数赋值给数组x
{
x[p]=a[c];
p++;
}
}
}
for (d=0;d<n;d++) //判断b有a没有的数
{
int mun=0;
for (int l=0;l<i;l++) //当a数组没有一样的数时
{
if (b[d]==a[l])
{
mun=1;
break;
}
}
if (mun==0)
{
int g=0;
if (d!=0)
{
for (int r=0;r<d;r++)
{
if (b[d]==b[r])
{
g=1;
break;
}
}
}
if (g==0) //当a数组和该数之前都没有一样的数时,将该数赋值给数组x
{
x[p+v]=b[d];
v++;
}
}
}
//第三部分,将数组x输出
printf ("%d",x[0]);
for (int t=1;t<p+v;t++)
{
printf (" %d",x[t]);
}
return 0;
}
只是看着长而已,其实很好懂。