• 一维数组——找公共元素


    【问题描述】

    编写程序,求两个数组中的公共元素(顺序以第一个数组为准)如果没有公共元素,则输出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

    解析

    论思路,这道题目不算难。但是要注意以下几点(就以两个数组含有公共元素为例):
    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(<
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
  • 相关阅读:
    【Linux】Linux基本使用和Web程序部署,我奶奶都能看懂
    算法提升(一)二分法
    Kettle REST Client获取token调用接口解析JSON入文件实战

    JD(按关键字搜索商品)API接口
    Redis_02_Redis五种基本类型
    常用封装工具类
    java-net-php-python-jspm家教信息管理系统(2)计算机毕业设计程序
    net-java-php-python-俚语管理系统计算机毕业设计程序
    【软件设计师21天-考点整理】6)计算机系统构成及硬件基础知识
  • 原文地址:https://blog.csdn.net/qq_43034907/article/details/127435985