首页 > 试题广场 >

整型数组合并

[编程题]整型数组合并
  • 热度指数:122023 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解

题目标题:

将两个整型数组按照升序合并,并且过滤掉重复数组元素。
输出时相邻两数之间没有空格。




输入描述:

输入说明,按下列顺序输入:
1 输入第一个数组的个数
2 输入第一个数组的数值
3 输入第二个数组的个数
4 输入第二个数组的数值



输出描述:

输出合并之后的数组

示例1

输入

3
1 2 5
4
-1 0 3 2

输出

-101235
#include <bits/stdc++.h>
using namespace std;
int main() {
   int n,m,k;
   int a[10000],b[10000];
   long long c[20000];
   while(cin>>n){ k=0;
    for(int i=0;i<n;i++) cin>>a[i],c[k++]=a[i];
    cin>>m;
    for(int i=0;i<m;i++) cin>>b[i],c[k++]=b[i];
    sort(c,c+n+m);
    for(int i=0;i<n+m;i++){
        if(c[i]!=c[i+1]) cout<<c[i];
    }
    cout<<'\n';
   }
    return 0;
} 

发表于 2017-11-24 23:17:38 回复(2)
package HUAWEI2;

import java.util.Scanner;
import java.util.TreeSet;

public class Demo40 {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		while(sc.hasNext()){
			int num1 = sc.nextInt();
			TreeSet<Integer> set = new TreeSet<>();
			for(int i=0;i<num1;i++){
				set.add(sc.nextInt());
			}
			int num2 = sc.nextInt();
			for(int i=0;i<num2;i++){
				set.add(sc.nextInt());
			}
			for(int temp:set){
				System.out.print(temp);
			}
			System.out.println();
		}
		sc.close();
	}
}  

发表于 2016-12-20 20:57:41 回复(9)
输入+冒泡+输出
#include<stdio.h>
int main()
{
/**********输入*****************************/
    int i,m,n,a[1000];
    while(scanf("%d",&m)!=EOF)
    {
        for(i=0;i<m;i++)
        {
            scanf("%d",&a[i]);
        }
        scanf("%d",&n);
        for(i=0;i<n;i++)
        {
            scanf("%d",&a[m+i]);
        }
/**********冒泡*****************************/
        int tmp,j,k;
        for(j=0;j<m+n-1;j++)
            for(k=j+1;k<m+n;k++)
            {
                if(a[j]>a[k])
                {
                    tmp=a[j];
                    a[j]=a[k];
                    a[k]=tmp;
                }
            }
/**********输出*****************************/
        for(i=0;i<m+n;i++)
        {
            if(a[i]!=a[i+1])
                printf("%d",a[i]);
        }
        printf("\n");
    }
    return 0;
}


编辑于 2020-11-24 10:16:34 回复(0)
//用map存储,自然是升序。
#include<iostream>
#include<map>
using namespace std;

int main(){
    int n1,n2;
    while(cin>>n1){
        int i;
        int num;
        map<int, int>m;
        for(i=0; i<n1; i++){
            cin>>num;
            m[num]++;
        }
        cin>>n2;
        for(i = 0; i< n2; i++){
            cin>>num;
            m[num]++;
        }
        map<int,int>::iterator it = m.begin();
        while(it!=m.end()){
            cout<<it->first;
            ++it;
        }
    }
    return 0;
}

发表于 2016-07-11 15:48:39 回复(0)
这个测试用例感觉不太对吧
测试用例:
50 525 1435 1695 3861 4847 9516 11430 14061 18581 22685 22917 23641 23710 24003 27200 29507 31105 31299 34210 38135 40454 41064 41091 41285 41379 45057 45783 46608 47373 50704 52197 52676 53894 55374 55911 57964 58542 58655 59060 72172 73406 75870 76763 79143 79539 79999 80864 84319 85218 86802 102 1804 1917 2420 5513 5933 6463 6829 7730 7801 9195 9506 9955 11622 12067 12176 12843 14410 15504 15966 16018 16100 16599 19251 20049 21011 21201 23431 25796 26130 27151 27348 28150 31037 33740 33940 34645 34972 36147 37654 39810 40143 40160 40216 41889 43786 43990 46155 46330 46855 46920 47666 47760 48605 48795 50334 51288 52746 55091 56183 58489 58597 61665 61985 62427 63403 63558 63743 64234 65942 66801 68427 68609 68738 70588 71408 74111 74818 75298 77316 78586 79375 80636 81664 81763 82292 82603 84089 84114 84766 85417 85710 86434 86552 90294 92295 93248 93352 93548 93561 94862 95721 95783 
对应输出应该为:
525143516951804191724203861484755135933646368297730780191959506951699551143011622120671217612843140611441015504159661601816100165991858119251200492101121201226852291723431236412371024003257962613027151272002734828150295073103731105312993374033940342103464534972361473765438135398104014340160402164045441064410914128541379418894378643990450574578346155463304660846855469204737347666477604860548795503345070451288521975267652746538945509155374559115618357964584895854258597586555906061665619856242763403635586374364234659426680168427686096873870588714087217273406741117481875298758707676377316785867914379375795397999980636808648166481763822928260384089841148431984766852188541785710864348655286802902949229593248933529354893561948629572195783 2394297742275804718281808557944211586116381307615453162331649516533169961777018465186481884120822211082306523204244132681227923286433038031373323083387234180365063723237730377313827339848411354305343493435364706449901500235067451125533675442654960569755797659246593366022163111637106536865424655426641168331691787006971491716917246072766736757427875485765057678676825777088003381092812428145482211832728541085494887218982690008906249097992302927179277093324
你的输出为:
525143516951804191724203861484755135933646368297730780191959506951699551143011622120671217612843140611441015504159661601816100165991858119251200492101121201226852291723431236412371024003257962613027151272002734828150295073103731105312993374033940342103464534972361473765438135398104014340160402164045441064410914128541379418894378643990450574578346155463304660846855469204737347666477604860548795503345070451288521975267652746538945509155374559115618357964584895854258597586555906061665619856242763403635586374364234659426680168427686096873870588714087217273406741117481875298758707676377316785867914379375795397999980636808648166481763822928260384089841148431984766852188541785710864348655286802902949229593248933529354893561948629572195783

最大的数据不就是95783吗, 横线上面多出来的这些数据到底是什么鬼

发表于 2016-03-04 18:10:00 回复(15)
没啥大问题,想到了set就很简单。唯一坑的是最后输出不能printIn,要print,不然一直通过0
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNext()){
            int size1 = scanner.nextInt();
            Set<Integer> set1 = new TreeSet<>();
            for (int i = 0; i < size1; i++) {
                set1.add(scanner.nextInt());
            }
            int size2 = scanner.nextInt();
            for (int i = 0; i < size2; i++) {
                set1.add(scanner.nextInt());
            }
            for (int value:set1) {
                System.out.print(value);
            }
            System.out.println();
        }
    }
}


发表于 2020-07-09 15:56:41 回复(0)
#include<iostream>
#include<set>
using namespace std;
int main() {
	int num, tmp;
	while (cin >> num) {
		set<int> res;
		while (num--) {
			cin >> tmp;
			res.insert(tmp);
		}
		cin >> num;
		while (num--) {
			cin >> tmp;
			res.insert(tmp);
		}
		for (auto i : res) cout << i;
		cout << endl;
	}
}

发表于 2017-03-19 16:34:05 回复(1)
这一题牛客的OJ是不是有问题,在华为的OJ都通过了,牛客竟然不过
#include <iostream>
#include <vector>
#include <set>
using namespace std;
int main()
{
    int n,m;
    int val,temp;
    set<int>result;
    while(cin>>n)
    {

        while(n--)
        {
            cin>>val;
            result.insert(val);
        }
        cin>>m;
        while(m--)
        {
            cin>>temp;
            result.insert(temp);
        }
        set<int>::const_iterator it;
        for(it=result.begin();it!=result.end();it++)
        {
            cout<<*it;
        }
        result.clear();  
    }
    return 0;
}

发表于 2016-08-13 15:05:37 回复(6)
#include<iostream>
#include<string>
#include<vector>
#include <algorithm>
using namespace std;
int main()
{
	int M,N;
	vector<int> vec;
	while(cin>>M)
	{
		int temp;
	    for(int i=0;i<M;i++)
	    {
	    	cin>>temp;
	    	vec.push_back(temp);
		}
		cin>>N;
		for(int i=0;i<N;i++)
	    {
	    	cin>>temp;
	    	vec.push_back(temp);
		}
		sort(vec.begin(),vec.end()); 
		cout<<vec[0];
		for(int i=1;i<vec.size();i++)
		    {
		    	if(vec[i]==vec[i-1])
		    	    continue;
		        cout<<vec[i];	
			}
//注意,(1)不能输出换行(之前我在输出结束后加了一个换行,就通不过测试用例);
//(2)vector要清除数据(没有这个一直没让我通过);
        vec.clear();
	}
	return 0; 
} 

发表于 2016-07-22 21:08:12 回复(6)
看到去重,就想着 Set。

import java.util.Scanner;
import java.util.Set;
import java.util.HashSet;
import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()) {
            Set<Integer> set = new HashSet<>();
            
            // 1.输入两个数组
            int n1 = sc.nextInt();
            for(int i=0; i<n1; i++) {
                set.add(sc.nextInt());
            }
            int n2 = sc.nextInt();
            for(int i=0; i<n2; i++) {
                set.add(sc.nextInt());
            }
            
            // 2.将set转为数组
            int[] arr = new int[set.size()];
            int index = 0;
            for(Integer i : set) {
                arr[index++] = i;
            }
            
            // 3.排序数组,输出结果
            Arrays.sort(arr);
            for(int i : arr) {
                System.out.print(i);
            }
        }
    }
}


发表于 2022-04-25 08:11:37 回复(0)
不排序,直接一个set搞定
#include<set>  
#include<iostream>
using namespace std;

int main(){
    int na,nb,temp;
    while(cin>>na){
        set<int> a;
        for(int i=0;i<na;i++){
            cin>>temp;
            a.insert(temp);  //数组1加入a
        }
        cin>>nb;
        for(int i=0;i<nb;i++){
            cin>>temp;
            a.insert(temp); // 数组2继续加入a            }
        for(auto it=a.begin();it!=a.end();it++)
            cout<<*it;  // 输出值
        cout<<endl;
    }
}


发表于 2022-01-13 10:28:46 回复(0)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.TreeSet;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String s;
        while ((s = br.readLine()) != null) {
            String[] s1 = br.readLine().split(" ");
            String s2 = br.readLine();
            String[] s3 = br.readLine().split(" ");
            TreeSet<Integer> set = new TreeSet<>();
            for (String str : s1) {
                set.add(Integer.parseInt(str));
            }
            for (String s4 : s3) {
                set.add(Integer.parseInt(s4));
            }
            for (Integer n : set) {
                System.out.print(n);
            }
            System.out.println();
        }
    }
}

发表于 2021-09-25 10:17:35 回复(0)
TreeSet 轻松解决
import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNextInt()) {
            Set<Integer> set = new TreeSet<>();
            int num1 = in.nextInt();
            for (int i = 0; i < num1; i++) {
                set.add(in.nextInt());
            }
            int num2 = in.nextInt();
            for (int i = 0; i < num2; i++) {
                set.add(in.nextInt());
            }
            for (int i : set) {
                System.out.print(i);
            }
            System.out.println();
        }
    }
 }


发表于 2021-02-23 09:44:35 回复(0)
import java.util.*;

public class Main{
    public static void main(String[] args){
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNext()){
            Set<Integer> composite = new TreeSet<>();
            int size1 = scanner.nextInt();
            for (int i = 0; i < size1; i++){
                composite.add(scanner.nextInt());
            }
            int size2 = scanner.nextInt();
            for (int i = 0; i < size2; i++){
                composite.add(scanner.nextInt());
            }
            for (Integer i : composite){
                System.out.print(i);
            }
            System.out.print("\n");
        }
    }
}

发表于 2021-02-15 16:53:22 回复(0)
Java:
import java.util.Scanner;
import java.util.Set;
import java.util.TreeSet;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext()) {
            int n = sc.nextInt();
            Set<Integer> set = new TreeSet<>();
            for (int i = 0; i < n; i++)
                set.add(sc.nextInt());
            n = sc.nextInt();
            for (int i = 0; i < n; i++)
                set.add(sc.nextInt());
            for (Integer integer : set) System.out.print(integer);
            System.out.println();
        }
    }
}


发表于 2021-02-01 22:15:36 回复(0)
#include <bits/stdc++.h>
using namespace std;
int main(){
    for(int n,val;cin>>n;){
        set<int> sint;  //set容器:去重,默认从小到大自动排序
        for(int i=0;i<n;++i){
            cin>>val;
            sint.insert(val);
        }
        cin>>n;
        for(int i=0;i<n;++i){
            cin>>val;
            sint.insert(val);
        }
        for(auto i:sint) cout << i;
        cout << endl;
    }
}

      set容器:去重,默认从小到大排序

发表于 2020-06-27 17:47:03 回复(0)
#include<set>
(855)#include<iostream>
#include<stdlib.h>
using namespace std;

void  Merge_integer_arrays()
{
	// 方法: 基于set自动去重排序功能实现

	int num;
	set<int> ans;
	int temp;
	int flag = 0;
	while (cin >> num)
	{
		flag++;
		for (int i = 0; i < num; i++)
		{
			cin >> temp;
			ans.insert(temp);
		}
		if (flag == 2)
		{
			flag = 0;
			for (auto it = ans.begin(); it != ans.end(); it++)
			{
				cout << *it;
			}
			cout << endl;
			ans.clear();
		}
	}
}

int main()
{
	Merge_integer_arrays();
	system("pause");
	return 0;
}

发表于 2020-03-07 17:10:30 回复(0)
//把两个数组直接合为一个,排序后输出
#include<iostream>
#include<algorithm>
using namespace std;
int main(){
    int m,n;
    while(cin>>m){
        int* a1=new int[m];
        for(int i=0;i<m;i++)
            cin>>a1[i];
        cin>>n;
        int* a2=new int[n];
        for(int i=0;i<n;i++)
            cin>>a2[i];
        int* a3=new int[m+n];
        for(int i=0;i<m;i++)
            a3[i]=a1[i];
        for(int i=0;i<n;i++)
            a3[i+m]=a2[i];
        sort(a3,a3+m+n);
        cout<<a3[0];
        for(int i=1;i<m+n;i++)
            if(a3[i-1]!=a3[i])
                cout<<a3[i];
        cout<<endl;
    }
}

发表于 2020-01-08 18:45:17 回复(0)
#include<iostream>
#include<set>
using namespace std;
int main()
{
    int num,num1,num2;
    while(cin>>num1)
    {
        set<int> res;
        while(num1--)
        {
            cin>>num;
            res.insert(num);
        }
        cin>>num2;
        while(num2--)
        {
            cin>>num;
            res.insert(num);
        }
        set<int>::iterator iter;
        for(iter = res.begin();iter!= res.end();iter++)
        {
            cout<<*iter;
        }
        cout<<endl;
        res.clear();
    }
    return 0;
}
这个题很简单,因为需要升序排列两个数组中的元素,所以使用STL中的set最为简单,因为set中的元素都是按升序排列的,所以直接输入到set中就OK。
发表于 2019-12-10 09:29:41 回复(0)
import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        while (sc.hasNext()) {
            Set<Integer> set = new TreeSet<Integer>();
            int n1 = sc.nextInt();
            for(int i=0; i<n1; i++) {
                set.add(sc.nextInt());
            }
            int n2 = sc.nextInt();
            for(int i=0; i<n2; i++) {
                set.add(sc.nextInt());
            }
            for(Integer i : set) {
                System.out.print(i);
            }
            System.out.println();
        }
    }
}

发表于 2018-10-08 22:11:28 回复(0)