实验7-1-4 找出不是两个数组共有的元素 (20分)

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

输入格式:
输入分别在两行中给出两个整型数组,每行先给出正整数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

其实这道题最后输出的时候我最初用了先去重再输出,即用原数组和新数组比较,新数组没有原数组的就放进新数组,但是这会导致一个问题,就是如果原数组中包含0元素,则就不会把0元素放进新数组,因为新数组初始化默认所有值为0,导致最后一个测试用例过不去,于是换了一种新输出方法。

即找从0位开始到该元素前一位是否有和该元素相同的,有则终止内层循环进行下一轮输出元素判断。

#include<stdio.h>
#include<ctype.h>
#include<string.h>
#include<math.h>
#include<stdlib.h>
int main()
{	
	int m, n, i, k = 0, j;
    scanf("%d", &m);
    int arr1[m], arr3[25], temp, arr4[40];
    for ( i = 0; i < m; i++)
        scanf("%d", &arr1[i]);
    scanf("%d", &n);
    int arr2[n];
    for ( i = 0; i < n; i++)
        scanf("%d", &arr2[i]);
    //n中找没有m包含的数
    for ( i = 0; i < m; i++){
        temp = arr1[i];
        for (j = 0; j < n; j++){
            if ( arr2[j] == temp)
                break;
            
        }
        if (j == n){
            arr3[k] = temp;
            k++;
        }
            
    }
    
    //m中找没有n中包含的数
    for ( i = 0; i < n; i++){
        temp = arr2[i];
        for (j = 0; j < m; j++){
            if ( arr1[j] == temp)
                break;
            
        }
        if (j == m){
            arr3[k] = temp;
            k++;
        }
            
    }
    printf("%d", arr3[0]);
	//输出
	for(i = 1; i < k; i++)
	{
		for(j = 0; j < i; j++)          //判断待输出位之前的元素是否和该元素相同,相同则终止,判断下一个待输出的元素
		{
			if(arr3[i] == arr3[j])
				break;
		}
		if(j == i)                  //内层循环结束后,j == i,之前元素没有与之重复的,输出该元素。
			printf(" %d", arr3[i]);
	}
	return 0;
} 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 这道题要求找出不是两个数组共有元素给定两个整型数组,每行先给出一个整型n(≤20),随后是n个整数,表示第一个数组中的n个元素;再给出一个整型m(≤20),随后是m个整数,表示第二个数组中的m个元素。 ### 回答2: 题目描述: 本题要求我们找出两个数组中不共有元素给定两个整型数组,我们需要别比较两个数组中的元素找出不同的元素。 解题思路: 首先,我们需要输入两个数组及其元素别放到两个数组中。然后,我们需要遍历两个数组,比较两个数组中的元素是否相等,如果不相等则说明该元素不是两个数组共有元素,将其输出即可。 以下是代码实现: #include<stdio.h> int main() { int n,m; //定义两个数组元素个数 scanf("%d",&n); //输入第一个数组元素个数 int a[n]; //定义第一个数组及其元素 for(int i=0;i<n;i++) { scanf("%d",&a[i]); //输入第一个数组元素 } scanf("%d",&m); //输入第二个数组元素个数 int b[m]; //定义第二个数组及其元素 for(int i=0;i<m;i++) { scanf("%d",&b[i]); //输入第二个数组元素 } int flag=0; //定义标志位 for(int i=0;i<n;i++) //遍历第一个数组 { for(int j=0;j<m;j++) //遍历第二个数组 { if(a[i]==b[j]) //如果两个元素相等 { flag=1; //将标志位置1 break; //跳出当前循环 } } if(!flag) //如果标志位为0 { printf("%d ",a[i]); //输出该元素 } flag=0; //将标志位置0 } for(int i=0;i<m;i++) //遍历第二个数组 { for(int j=0;j<n;j++) //遍历第一个数组 { if(b[i]==a[j]) //如果两个元素相等 { flag=1; //将标志位置1 break; //跳出当前循环 } } if(!flag) //如果标志位为0 { printf("%d ",b[i]); //输出该元素 } flag=0; //将标志位置0 } return 0; } 总结: 本题需要遍历两个数组,比较两个数组中的元素是否相等,输出不同的元素。解题过程中需要定义标志位,用于判断元素是否相等。 ### 回答3: 题目要求我们找出两个数组中不共有元素,我们可以把这个问题转化为找到数组A中的元素,判断是否也在数组B中出现过,如果没有出现,我们就找到了一个不共有元素。 具体的操作步骤如下: 1. 首先我们需要读入两个数组A和B。 2. 读入之后,我们可以循环遍历数组A中的每个元素。 3. 对于每个元素,我们需要判断是否也在数组B中出现过。如果没有出现过,说明它是一个不共有元素,我们可以把它加入到一个新的数组C中。 4. 最后输出数组C中的元素就是不共有元素。 下面是具体的代码实现: ```python # 读入两个数组 n1 = int(input()) a = list(map(int, input().split())) n2 = int(input()) b = list(map(int, input().split())) # 找出共有元素 c = [] for i in range(n1): if a[i] not in b: c.append(a[i]) # 输出结果 if len(c) == 0: print("NOT FOUND") else: for i in range(len(c)): print(c[i], end=' ') ``` 以上代码会先读入两个数组A和B,然后使用一个循环遍历数组A中的每个元素。每次遍历时,我们使用`not in`操作符判断当前元素是否也在数组B中出现过,如果没有出现过,我们就把它加入到数组C中。最后再根据数组C的长度输出结果即可。 需要注意的是,如果两个数组中没有不共有元素,我们需要输出`NOT FOUND`。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值