你的代码中第二个循环i从3开始,就忽略两个数的和是第一个或第二个元素的情况。
#include <iostream>
#include <unordered_set>
using namespace std;
int main()
{
int n;
cin >> n;
unordered_set<int> s;
for (int i = 0; i < n; i++)
{
int a;
cin >> a;
s.insert(a);
}
int count = 0;
for (auto it1 = s.begin(); it1 != s.end(); ++it1)
{
auto it2 = it1;
++it2;
for (; it2 != s.end(); ++it2)
{
if (s.find(*it1 + *it2) != s.end())
count++;
}
}
cout << count;
return 0;
}