数组-06. 找出不是两个数组共有的元素(20)

给定两个整型数组,任务是找出不是两者共有的元素,并按顺序输出,不包含重复数字。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


数组-06. 找出不是两个数组共有的元素(20)

时间限制
400 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
张彤彧(浙江大学)

给定两个整型数组,本题要求找出不是两者共有的元素。

输入格式:

输入分别在2行中给出2个整型数组,每行先给出正整数N(<=20),随后是N个整数,其间以空格分隔。

输出格式:

在一行中按照数字给出的顺序输出不是两数组共有的元素,数字间以空格分隔,但行末不得有多余的空格。题目保证至少存在一个这样的数字。同一数字不重复输出。

输入样例:
10 3 -5 2 8 0 3 5 -15 9 100
输出样例:
3 5 -15 6 4 1

其实数据要求不大,20*20,所以直接爆破

        因为知道两把两行数存在一个数组里行数字的具体个数,所以可以把两行数存在一个数组里。

        首先上来检查 : 在第一行中、不在第二行中的数

                    然后检查在第二行中、不在第一行中的数

每次找到以后,在用函数putin判断一下,这个数在之前是否存在,如果存在,就不存进去。

(其实,录入数据之后, 就可以先进行重复数字的筛选了,这样在之后就可以不用写类似putin这样的判断函数)


#include <stdio.h>

int putin(int x, int num[], int cnt);
int main(int argc, const char* argv[])
{
	int N1, N2, i, j;
	int num1[41] = {0}, num2[20] = {0};
	int cnt = 0;
	
	scanf("%d", &N1);
	for(i = 0; i < N1; i++)
		scanf("%d", &num1[i]);
	scanf("%d", &N2);
	for(i = N1; i < N1 + N2; i++)
		scanf("%d", &num1[i]);

	for(i = 0; i < N1; i++)
	{
		int MATCH = 0;
		for(j = N1; j < N1 + N2; j++)
		{
			if(num1[i] == num1[j])
			{
				MATCH = 1;
				break;
			}
		}
		if(MATCH == 0)
			cnt = putin(num1[i], num2, cnt);	
	}
	
	
	for(i = N1; i < N1 + N2; i++)
	{
		int MATCH = 0;
		for(j = 0; j < N1; j++)
		{
			if(num1[i] == num1[j])
			{
				MATCH = 1;
				break;
			}
		}
		if(MATCH == 0)
			cnt = putin(num1[i], num2, cnt);
	}
	
	for(i = 0 ; i < cnt; i++)
	{
		printf("%d", num2[i]);
		if(i < cnt-1)
			printf(" ");
	}
	
	return 0;
}

int putin(int x, int num[], int cnt)
{
	int i, j;
	int HAVE = 0;
	
	for(i = 0; i < cnt; i++)
	{
		if(x == num[i])
		{
			HAVE = 1;
			break;
		}
	}
	
	if(HAVE == 0)
	{
		num[cnt] = x;
		cnt ++;
	}
	return cnt;
}



在C语言中,找出两个一维数组中不共有元素通常涉及到遍历和比较操作。假设我们有两个一维整型数组`arr1`和`arr2`,长度分别为`n1`和`n2`,以下是步骤: ```c #include <stdio.h> #include <stdlib.h> // 函数声明 void find_unique(int *arr1, int n1, int *arr2, int n2); int main() { int arr1[] = {1, 2, 3, 4, 5}; int n1 = sizeof(arr1) / sizeof(arr1[0]); int arr2[] = {4, 5, 6, 7}; int n2 = sizeof(arr2) / sizeof(arr2[0]); // 创建临时数组存放不共有元素 int unique[4 * (n1 + n2)]; // 假设最大不共有8个元素 int unique_count = 0; // 寻找不共有元素 find_unique(arr1, n1, arr2, n2, unique, &unique_count); // 输出结果 printf("不共有元素有:"); for (int i = 0; i < unique_count; i++) { printf("%d ", unique[i]); } return 0; } // 查找并添加不共有元素到临时数组 void find_unique(int *array1, int len1, int *array2, int len2, int *result, int *count) { for (int i = 0; i < len1; i++) { if (binary_search(array2, len2, array1[i]) == -1) { result[*count++] = array1[i]; } } for (int j = 0; j < len2; j++) { if (binary_search(array1, len1, array2[j]) == -1) { result[*count++] = array2[j]; } } } // 二分查找函数,查找arr中是否存在val int binary_search(int *arr, int n, int val) { int low = 0, high = n - 1; while (low <= high) { int mid = low + (high - low) / 2; if (arr[mid] == val) return mid; else if (arr[mid] < val) low = mid + 1; else high = mid - 1; } return -1; // 如果值不存在于数组,则返回-1 } ``` 在这个示例中,我们首先创建了一个临时数组`unique`存储不共有元素。然后通过`find_unique`函数,我们分别检查每个数组中的元素是否存在于另一个数组中,若不存在则添加到`unique`数组。最后,遍历`unique`数组并输出结果。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值