编写程序,求两个数组中的公共元素(顺序以第一个数组为准)如果没有公共元素,则输出no。
输入分4行:第一行为第一个数组的数据个数n,第二行为n个数,第三行为第二个数组的数据个数m,第四行为m个数。
公共元素(以空格分隔)或“no”
4
2 4 2 3
3
1 3 2
2 3
输入的第一组数是2、4、2、3,第二组数是1、3、2,它们的公共元素是2、3
3
1 2 3
3
4 5 6
no
输入的第一组数是1、2、3,第二组数是4、5、6,它们没有公共元素,输出no
论思路,这道题目不算难。但是要注意以下几点(就以两个数组含有公共元素为例):
1、公共元素输出的顺序以第一个数组为准。
2、有可能第一个数组含有不止一个相同的元素,而第二个数组也含有不止一个相同的元素,且两个数字相同,如:
5
1 2 2 2 3
6
1 2 2 2 2 4
这时候,我们只需要输出一个数字“2”就行了,而不应该输出多个数字“2”。
基于以上思考,第一点很好解决,直接让i遍历第一个数组的每一个元素。而对于第二点的查重问题,则需要谨慎了。
对于这个重复的问题,我们很容易就想到一种思路
方法一:常规查重法
每次i开始新一轮循环,即找到第一个数组的下一个数字的时候,就查找一遍装载公共元素的数组里面是否已经含有此元素。如果有,不需要继续了,直接continue开始新一轮循环。
代码如下:
#include
using namespace std;
const int N=10002;
int m,n,a[N],b[N],f[N],num;
bool bx;
int main()
{
cin>>m;
for(int i=1;i<=m;i++) cin>>a[i];
cin>>n;
for(int i=1;i<=n;i++) cin>>b[i];
for(int i=1;i<=m;i++)
{
bx=1;
for(int j=1;j<=num;j++)
if(<