ブルーブリッジカップアルゴリズムトレーニングセットの操作

問題の説明

二つの整数A、Bを考えると、その交差点、労働組合、およびAのI Bセットを決定
入力フォーマット
  最初の行動は、整数N、Aは、セット内の要素の数を表します。
  N個の互いに異なる整数の第2行は、スペースで区切られた、要素Aは、コレクションを表します。
  3番目の列、整数mは、Bは、セット内の要素の数を表します。
  4行目は、互いに異なるm個のスペースで区切られた要素Bを表す整数値がセットされています。
  コレクションのすべての要素は、範囲INT <= 1000内の整数であり、n、mは。
出力フォーマット
  すべての要素の交点の出力A、Bの昇順で、最初の行の。
  小から大へ、すべての要素Bのために、第2出力線、濃縮しました。
  A I Bのすべての要素の3行目の出力は昇順に設定しました。
サンプル入力
。5
1 2 3 4 5
。5
2. 8 6 10 4
の出力例
2 4
1 2 3 4 10 5 6 8
。1. 3. 5
サンプル入力
。4
1 2 3 4
3
5 6 7
サンプル出力
1234 6. 7. 5
。1 4 3 2

問題解決のアイデア:

方法の一つ:達成するために、ルックアップ機能の整然としたセットでSTLを使用して

#include<iostream>  
#include<algorithm>
#include<set>
#include<vector> 
using namespace std;
int A[1000] = {0};
int B[1000] = {0};
set<int> a;
set<int> b;
vector<int> inter;
set<int> unio;
vector<int> resi;

int main(){
	int m, n;
	cin >> m;
	for(int i = 0; i < m; i++){
		cin >> A[i];
		a.insert(A[i]);
	} 
	cin >> n;
	for(int i = 0; i < n; i++){
		cin >> B[i];
		b.insert(B[i]);
	} 
	//交集 
	set<int>::iterator it;
	for(it = a.begin(); it!=a.end(); it++){
		if(b.find(*it) != b.end()) inter.push_back(*it);
	} 
	//并集 
	for(it = a.begin(); it!=a.end(); it++){
		unio.insert(*it);
	}
	for(it = b.begin(); it!=b.end(); it++){
		unio.insert(*it);
	}
	//余集 
	for(it = a.begin(); it!=a.end(); it++){
		if(b.find(*it) == b.end()) resi.push_back(*it);
	} 
	
	//打印 
 	for(int i = 0; i < inter.size(); i++){
 		cout << inter[i] << " ";
	}
	cout << endl;
	for(it = unio.begin(); it != unio.end(); it++){
		cout << *it << " ";
	} 
	cout << endl;
	for(int i = 0; i < resi.size(); i++){
 		cout << resi[i] << " ";
	}
	cout << endl;
	return 0;
}

方法2:内蔵の解決機能を使います

#include<cstdio> 
#include<cstdlib> 
#include<cstring>
#include<iostream>  
#include<algorithm>
#include<set>
#include<vector> 
using namespace std;
vector<int> a;
vector<int> b;
vector<int> c;

void Print(vector<int> &c){
	for(int i=0;i<c.size();i++){
		cout<<c[i]<<" ";
	}
	c.clear();
	cout<<endl;
}

int main(){
	int m, n, temp;
	cin >> m;
	for(int i = 0; i < m; i++){
		cin >> temp;
		a.push_back(temp);
	}
	sort(a.begin(),a.end());
	cin >> n;
	for(int i = 0; i < n; i++){
		cin >> temp;
		b.push_back(temp);
	}
	sort(b.begin(),b.end());
	set_intersection(a.begin(),a.end(),b.begin(),b.end(),back_inserter(c));
	Print(c);
	set_union(a.begin(),a.end(),b.begin(),b.end(),back_inserter(c));
	Print(c); 
	set_difference(a.begin(),a.end(),b.begin(),b.end(),back_inserter(c));
	Print(c); 
}
发布了54 篇原创文章 · 获赞 17 · 访问量 9170

おすすめ

転載: blog.csdn.net/qq_41979513/article/details/103191842