【基础算法】[PTA]-找出不是两个数组共有的元素

文章目录

找出不是两个数组共有的元素

题目描述:


解题思路:

  • 【整体思路】:在两个整型数组中,找出不是两者共有的元素,意思就是既要在第一个数组中找出第二个数组中没有出现的元素,也要在第二个数组中找出第一个数组中没有出现的元素。所以这里可以每个数组做一次主体,将主体数组中每一个元素在另一个数组中走一遍,如果没有与其相等的元素,就入入一个临时数组(另外需要的数组,用来存放在两个整型数组中,不是两者共有的元素),直到主体数组遍历完再将另一个数组作为主体数组走一遍。当两个数组都走完后,临时数组里面的元素就是想要的元素,但是,这里可能会有重复的元素(假如一个数组中有两个3,而这个3在另外一个数组中没有出现,那么这个3在临时数组中就有两个),所以最后在打印临时数组每个元素的时候需要往前寻找看有没有相同的元素,如果有就不用打印了,因为前面出现的已经打印过了。

  • 据此,这里可以用两个循环分别来找出在这个数组中出现而另一个数组没有出现的元素。

  • 两个循环每一个循环都是嵌套了一层循环,就是将当前数组的每一个元素在另一个数组中走一遍。

代码实现:

#include <stdio.h>

int main()
{
	// 目标数组 
	int a1[20] = { 0 };
	// 目标数组
	int a2[20] = { 0 };
	// 临时数组
	int a3[20] = { 0 };
	
	// 分别表示两个数组的长度(元素个数)
	int n, m;
	
	// 先输入的表示 a1 的长度,然后输入目标数组 a1 的每个元素
	scanf("%d", &n);
	for (int i = 0; i < n; i++)
	{
		scanf("%d", &a1[i]);
	}
	
	// 先输入的表示 a2 的长度,然后输入目标数组 a2 的每个元素
	scanf("%d", &m);
	for (int i = 0; i < m; i++)
	{
		scanf("%d", &a2[i]);
	}
	
	// k 为临时数组的索引
	int k = 0;
	for (int i = 0; i < n; i++)
	{
		// flag表示假设当前元素在另一个数组中不出现
		int flag = 1;

		for (int j = 0; j < m; j++)
		{
			// 如果找到相同的元素,就将 flag 置为 0 ,假设不成立
			if (a1[i] == a2[j])
			{
				flag = 0;
			}
		}
		
		// 如果假设成功,就将当前元素放入临时数组
		if (flag) a3[k ++] = a1[i];
	}

	for (int i = 0; i < m; i++)
	{
		int flag = 1;

		for (int j = 0; j < n; j++)
		{
			if (a2[i] == a1[j])
			{
				flag = 0;
			}
		}

		if (flag) a3[k++] = a2[i];
	}
	
	// 打印临时数组的数据,重复的只打印一次
	for (int i = 0; i < k; i++)
	{
		int flag = 1;
		
		// 向前寻找看有没有相同元素
		for (int j = 0; j < i; j++)
		{
			// 有就将 flag 置为 0 ,后面的 if 就不进去 
			if (a3[i] == a3[j])
			{
				flag = 0;
			}
		}
		
		// 如果 flag 为 1 ,说明当前的元素没有重复,进入 if
		if (flag)
		{
			// 控制输入格式,题目会检查
			if (!i)
			{
				// 如果是第一个元素就不打印空格
				printf("%d", a3[i]);
			}
			else
			{
				// 将空格往前打印,因为最后不能有空格
				printf(" %d", a3[i]);
			}
		}
	}

	return 0;
}

感谢阅读本小白的博客,错误的地方请严厉指出噢~

请添加图片描述

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
扎眼的阳光的头像扎眼的阳光普通用户
上一篇 2023年12月14日
下一篇 2023年12月14日

相关推荐