利用STL中的set来解题
注:一开始没有想到去重这个点,看了众多题解后,修改了自己的代码。
思路:set用来存集合,vector用双层循环来遍历输入的元素,set中count()函数用来判断元素是否在集合中,erase()根据元素的值或元素在集合中的迭代器位置来擦除它,在这个题里用来去重。
去重:(原题问题:其中有多少个数,恰好等于集合中另外两个(不同的)数之和?)
例:1 + 4 = 5 和 2 + 3 = 5 算一种
输入:
5
1 2 3 4 5
输出:
3
代码如下:
#include<iostream>
#include<set>
#include<vector>
using namespace std;
set<int> a;
vector<int> b;
int main(){
int n, num, cnt = 0;
cin >> n;
while (n > 0){
cin >> num;
a.insert(num);
b.push_back(num);
n--;
}
for (int i = 0; i < b.size() - 1; i++){
for (int j = i + 1; j < b.size(); j++){
int sum = b[i] + b[j];
if (a.count(sum)){
cnt++;
a.erase(sum);
}
}
}
cout << cnt;
return 0;
}