c++找公共元素:求两个数组中的公共元素(顺序以第一个数组为准)如果没有公共元素,则输出no。

【问题描述】编写程序,求两个数组中的公共元素(顺序以第一个数组为准)如果没有公共元素,则输出no。【输入形式】输入分4行:第一行为第一个数组的数据个数n,第二行为n个数,... 【问题描述】编写程序,求两个数组中的公共元素(顺序以第一个数组为准)如果没有公共元素,则输出no。

【输入形式】输入分4行:第一行为第一个数组的数据个数n,第二行为n个数,第三行为第二个数组的数据个数m,第四行为m个数。

【输出形式】公共元素(以空格分隔)或“no”

【样例输入1】

4

2 4 2 3

3

1 3 2

【样例输出1】2 3

【样例说明1】输入的第一组数是2、4、2、3,第二组数是1、3、2,它们的公共元素是2、3

【样例输入2】

3

1 2 3

3

4 5 6

【样例输出2】no

【样例说明2】输入的第一组数是1、2、3,第二组数是4、5、6,它们没有公共元素,输出no

【输入形式】输入分4行:第一行为第一个数组的数据个数n,第二行为n个数,第三行为第二个数组的数据个数m,第四行为m个数。

【输出形式】公共元素(以空格分隔)或“no”

【样例输入1】

4

2 4 2 3

3

1 3 2

【样例输出1】2 3

【样例说明1】输入的第一组数是2、4、2、3,第二组数是1、3、2,它们的公共元素是2、3

【样例输入2】

3

1 2 3

3

4 5 6

【样例输出2】no

【样例说明2】输入的第一组数是1、2、3,第二组数是4、5、6,它们没有公共元素,输出no
展开
 我来答
micckkk
2017-11-05 · TA获得超过118个赞
知道答主
回答量:51
采纳率:66%
帮助的人:14.4万
展开全部
#include "stdafx.h"
#include<iostream>
#include<vector>

void sort(int *src, int len);

int main()
{
printf("请输入第一个数组的数据个数\n");
int n;
scanf("%d", &n);
printf("请输入第一个数组所要包含的数据,请用空格隔开\n");
std::vector<int> nn;
do
{
int ni;
scanf("%d", &ni);
nn.push_back(ni);
} while (nn.size() < n);

printf("请输入第二个数组的数据个数\n");
int m;
scanf("%d", &m);
printf("请输入第二个数组所要包含的数据,请用空格隔开\n");
std::vector<int> mm;
do
{
int mi;
scanf("%d", &mi);
mm.push_back(mi);
} while (mm.size() < m);
std::vector<int> jg;
if (n >= m)
{
for (int i = 0; i < m; i++)
{
std::vector<int>::iterator ret1;
std::vector<int>::iterator ret2;
ret1 = std::find(nn.begin(), nn.end(), mm[i]);
if (ret1 != nn.end())
{
ret2 = std::find(jg.begin(), jg.end(), mm[i]);
if (ret2 == jg.end())
jg.push_back(mm[i]);
}
}
}
else
{
for (int i = 0; i < n; i++)
{
std::vector<int>::iterator ret1;
std::vector<int>::iterator ret2;
ret1 = std::find(mm.begin(), mm.end(), nn[i]);
if (ret1 != mm.end())
{
ret2 = std::find(jg.begin(), jg.end(), nn[i]);
if (ret2 == jg.end())
jg.push_back(nn[i]);
}
}
}
if (jg.size() > 0)
{
printf("公共元素为:\n");
int *a = jg.data();
sort(a, jg.size());
for (int i = 0; i < jg.size(); i++)
{
printf("%d ", a[i]);
}
}
else printf("公共元素为:\nno");
printf("\n");
system("pause");
return 0;
}

void sort(int *src, int len)
{
int tem;
for (int i = 0; i < len; i++)
{
for (int j = 0; j < len - i - 1; j++)
if (src[j] > src[j + 1])
{
tem = src[j];
src[j] = src[j + 1];
src[j + 1] = tem;
}
}
}

刚刚没注意看你的要求是要按第一个数组顺序排,所以上面的代码我写成了结果以从小大到排的,现在修改一下,按你的要求结果按第一个数组顺序排列,代码如下:

#include "stdafx.h"
#include<iostream>
#include<vector>

int main()
{
printf("请输入第一个数组的数据个数\n");
int n;
scanf("%d", &n);
printf("请输入第一个数组所要包含的数据,请用空格隔开\n");
std::vector<int> nn;
do
{
int ni;
scanf("%d", &ni);
nn.push_back(ni);
} while (nn.size() < n);

printf("请输入第二个数组的数据个数\n");
int m;
scanf("%d", &m);
printf("请输入第二个数组所要包含的数据,请用空格隔开\n");
std::vector<int> mm;
do
{
int mi;
scanf("%d", &mi);
mm.push_back(mi);
} while (mm.size() < m);
std::vector<int> jg;
for (int i = 0; i < n; i++)
{
std::vector<int>::iterator ret1;
std::vector<int>::iterator ret2;
ret1 = std::find(mm.begin(), mm.end(), nn[i]);
if (ret1 != mm.end())
{
ret2 = std::find(jg.begin(), jg.end(), nn[i]);
if (ret2 == jg.end())
jg.push_back(nn[i]);
}
}
if (jg.size() > 0)
{
printf("公共元素为:\n");
for (int i = 0; i < jg.size(); i++)
{
printf("%d ", jg[i]);
}
}
else printf("公共元素为:\nno");
printf("\n");
system("pause");
return 0;
}

ct...7@163.com
2017-11-04 · 超过27用户采纳过TA的回答
知道答主
回答量:106
采纳率:5%
帮助的人:13.9万
展开全部
void getmin(int array[],int arraylen,int out[],int outlen)
{//outlen应该为2
int i,j;
for(i=0;i<outlen;i++)out[i] = 0x7FFFFFFF;//这是一个最大整数值
for(i=0;i<arraylen;i++){//遍历数组
for(j=0;j<outlen;j++){//遍历最小数列表
if(array[i]<out[j]){//array中的数更小
out[j] = array[i];//记录该数
break;
}
//如果out中的数小,则看看下一个out数会不会比这个大
}
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式