{A} + {B}
Problem Description
给你两个集合,要求{A} + {B}.
注:同一个集合中不会有两个相同的元素.
Input
每组输入数据分为三行,第一行有两个数字n,m(0<=10000),分别表示集合A和集合B的元素个数.后两行分别表示集合A和集合B.每个元素为不超出int范围的整数,每个元素之间有一个空格隔开.
Output
针对每组数据输出一行数据,表示合并后的集合,要求从小到大输出,每个元素之间有一个空格隔开.
Sample Input
1 2
1
2 3
1 2
1
1 2
Sample Output
1 2 3
1 2
Author
xhd
可以用JAVA的Set类来写,就是hdu对此的判定并不严格。
JAVA代码:
import java.math.BigDecimal; import java.util.Iterator; import java.util.Scanner; import java.util.Set; import java.util.TreeSet; import javax.swing.plaf.basic.BasicArrowButton; public class Main { public static void main(String[] args) { Scanner inScanner = new Scanner(System.in); while(inScanner.hasNext()) { int m = inScanner.nextInt(); int n = inScanner.nextInt(); Set<Integer> set = new TreeSet<>(); for(int i = 0; i < m;i++) { int x = inScanner.nextInt(); set.add(x); } for(int i = 0 ;i < n;i++) { int x = inScanner.nextInt(); if(!set.contains(x)) { set.add(x); } } //for循环遍历。 // for(Integer integer:set) { // System.out.print(integer + " "); // } // System.out.print(" "); //一般迭代遍历。 Iterator<Integer> iterator = set.iterator(); while(iterator.hasNext()) { int i = iterator.next(); System.out.print(i + " "); } System.out.print(" "); //这个很重要,虽然最后一个数的后面有个空格,但是会AC,并且如果用println(),会WA。 } } }
C++代码:
#include <iostream> #include <set> using namespace std; int main() { set<int> a; //可以只用一个集合表示A和B的并集。 int m,n; while(cin>>m>>n){ a.clear(); //必须要用,相当于初始化。 while(m--){ int i; cin>>i; a.insert(i); } while(n--){ int i; cin>>i; a.insert(i); } int i=0; //注意领会。 set<int>::iterator it=a.begin(); for(;it!=a.end();it++,i++){ if(i==0) cout<<*it; else cout<<" "<<*it; } cout<<endl; } return 0; }