一、题目
给定两个整型数组,本题要求找出不是两者共有的元素
二、输入与输出
输入:输入分别在两行中给出两个整型数组,每行先给出正整数N(≤20),随后是N个整数,其间以空格分隔
输出:在一行中按照数字给出的顺序输出不是两数组共有的元素,数字间以空格分隔,但行末不得有多余的空格。题目保证至少存在一个这样的数字。同一数字不重复输出
三、样例
四、代码
#include <stdio.h>
int main()
{
int n, a[30] = { 0 }, i = 0, N, A[30] = { 0 }, b[100] = { 0 }, j = 0, c, flag = 0, k = 0;
scanf("%d", &n);
for (i = 0; i < n; i++)
{
scanf("%d", &a[i]);
}
//输入第一组数据
scanf("%d", &N);
for (i = 0; i < N; i++)
{
scanf("%d", &A[i]);
}
//输入第二组数据
for (i = 0; i < n; i++)
{
c = a[i];
flag = 0;
for (j = 0; j < N; j++)
{
if (c == A[j])
{
flag = 1;
break;
}
}
if (flag == 0)
{
b[k] = c;
k++;
}
//将不共有数据存入b[]中
}
//第一次比较,筛选出a[]中不是共有的元素
for (j = 0; j < N; j++)
{
c = A[j];
flag = 0;
for (i = 0; i < n; i++)
{
if (c == a[i])
{
flag = 1;
break;
}
}
if (flag == 0)
{
b[k] = c;
k++;
}
//将不共有数据存入b[]中
}
//第二次比较,筛选A[]中不是共有的元素
printf("%d", b[0]);
//取出第一个数据,方便后续b[]中的数据自比较
for (i = 1; i < k; i++)
{
flag = 0;
for (j = 0; j < i; j++)
{
if (b[i] == b[j])
{
flag = 1;
}
}
//自比较,去除重复数据
if (flag == 0)
{
printf(" %d", b[i]);
}
//比较一个,输出一个
}
return 0;
}
五、总结
基础知识:if条件语句,for循环语句,一维数组
基本思想:双重比较——先比较并储存a[ ]中数据,在比较并储存A[ ]中数据
设立标志——以flag==0为目标,筛选并存储数据
小编以为这道题的思维模式并不繁杂,但是一步一步地写下来的过程中存在诸多细节(如:小编第一次将A[ j ]写成了A[ i ]),所以对于提高梳理并解决繁琐的问题逻辑思维能力有很好的提高效果和促进作用,值得反复琢磨!
同样,小编也希望大家如果发现了代码中的漏洞,请多多指正;又或者,大家有新的思路或者更简洁、更方便的代码,多多指点小编。
微语:“余晖仍在,晚霞自在游荡,锁住了太阳花,也盖住了沙发。”