综述:
该题大概思路容易想到,找不是两个数组共有的元素倒是挺好找,但是具体实现起来也是不大容易,多个输入时调试也挺麻烦的,主要做起来有个比较麻烦的地方。就是不是两个数组共有的元素有两个,但是最终只能够输出一个,要把重复的元素过滤掉还是挺难搞的,还有一个地方是,输出的最后不能有空格,这句话虽然是个要求,但是给了我个思路,如果找到一个打印一个的话既难以过滤重复的数字,也不容易在末尾不打印空格,这时候就自然而然的有个想法了,那就是先找到不重复的元素一个接一个的放到一个空白的数组中,等找完所有元素打印出来即可。
题目:
给定两个整型数组,本题要求找出不是两者共有的元素。
输入格式:
输入分别在两行中给出两个整型数组,每行先给出正整数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 arr1[20] = { 0 };
int arr2[20] = { 0 };
int a[20] = { 0 };
int i = 0;
int n1 = 0;
int n2 = 0;
int flag = 0;
int count = 0;
scanf("%d", &n1);
for (i = 0; i < n1; i++)
{
scanf("%d", &arr1[i]);
}
scanf("%d", &n2);
for (i = 0; i < n2; i++)
{
scanf("%d", &arr2[i]);
}
for (i = 0; i < n1; i++)
{
int j = 0;
for (j = 0; j < n2; j++)
{
if (arr1[i] == arr2[j])
{
break;
}
}
if (j == n2)
{
int k = 0;
for (k = 0; k < count; k++)
{
if (arr1[i] == a[k])
{
flag = 1;
break;
}
}
if (flag == 0)
{
a[count] = arr1[i];
count++;
}
flag = 0;
}
}
//
for (i = 0; i < n2; i++)
{
int j = 0;
for (j = 0; j < n1; j++)
{
if (arr2[i] == arr1[j])
{
break;
}
}
if (j == n1)
{
int k = 0;
for (k = 0; k < count; k++)
{
if (arr2[i] == a[k])
{
flag = 1;
break;
}
}
if (flag == 0)
{
a[count] = arr2[i];
count++;
}
}
}
for (i = 0; i < count; i++)
{
printf("%d", a[i]);
if (i < count - 1)
{
printf(" ");
}
}
return 0;
}
思路:
本题输入两组数据到两个数组中,想要找出不是两者共有的元素,并且打印出来,具体实现分为如下几步:
1:先在第一组元素中,找第二组元素中没有的元素,我是用的最笨的办法,就是遍历,元素个数不多,第一组的每个元素挨个与第二组的每个元素比较,通过两个for循环实现。
2:找到第一个在第二个数组中不存在的元素,把它存放到数组a中,其中在放在数组a的过程是有判断,如果在数组a中已经存在相同元素就不存放,如果不存在相同元素则存放。
3:找完第一组中第二组没有的元素继续找第二组中,第一组没有的元素,重复步骤2。
4:遍历打印数组a,注意末尾不能有空格问题
总结:
本题挺麻烦,如果程序和我写的一样,在编写时注意一下标志位的使用,标志位改变之后在一个循环结束时别忘了复位问题。