题目详情 - 7-15 找出不是两个数组共有的元素 (pintia.cn)
7-15 找出不是两个数组共有的元素
分数 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
两个集合交集的补集
两种写法:
c++ unordered_set st1;
无序set
//保存数组 防止 多个相同1中有 2中没有情况 :(1:3 3 2:8 8 ) 防止3 8多次输出情况
but 输出题过不去。。。。对不了一起
//两个数组去重
//输出不相同的元素 一次
//防止多个不相同 set st1: 3 3 st2:8 8 输出一次3即可
//
#include<bits/stdc++.h>
using namespace std;
unordered_set<int> st1,st2;
vector<int> c;//保存1/2中有 2/1没有
int main()
{
int n,m;
cin>>n;
for(int i = 0;i<n;i++)
{
int x;
cin>>x;
st1.insert(x);
}
cin>>m;
for(int i = 0;i<m;i++)
{
int x;
cin>>x;
st2.insert(x);
}
for(auto &v:st1)
{
auto pos = st2.find(v);
if(pos == st2.end()) c.push_back(v);
}
for(auto &v:st2)
{
auto pos = st1.find(v);
if(pos == st1.end()) c.push_back(v);
}
bool fir = true;
for(auto v:c)
{
if(fir)
{
fir = 0;
printf("%d",v);
}else{
printf(" %d",v);
}
}
return 0;
}
arr写法
暴力
将1中有2中没有的 放入数组c
将2中有1中没有的 放入数组c
可能出现 3 3 都放入c中 (1中有多个3 2中没有 那么 3们都放入c)
双指针 前面有 后面不必输出 即可
#include<bits/stdc++.h>
using namespace std;
int a[21],b[21],c[21];
int n,m;
int k = 0;//保存不同
int main()
{
cin>>n;
for(int i =0;i<n;i++)
{
cin>>a[i];
}
cin>>m;
for(int i = 0;i<m;i++)
{
cin>>b[i];
}
int i,j;
for( i = 0;i<n;i++)
{
for( j = 0;j<m;j++)
{
if(a[i] == b[j])
{
break;
}
}
if(j == m)//不存在相等情况
{
c[k++] = a[i];
}
}
for(i = 0;i<m;i++)
{
for(j = 0;j<n;j++)
{
if(b[i] == a[j])
{
break;
}
}
if(j == n)
{
c[k++] = b[i];
}
}
printf("%d",c[0]);
for(i = 1;i<k;i++)
{
for(j = 0;j<i;j++)
{
if(c[i] == c[j])
{
break;
}
}
if(j == i)//如果前面没有i
{
printf(" %d",c[i]);//
}
}
return 0;
}