问题描述
有 N 个非零且各不相同的整数。请你编一个程序求出它们中有多少对相反数(a 和 -a 为一对相反数)。
输入格式
第一行包含一个正整数 N。(1 ≤ N ≤ 500)。
第二行为 N 个用单个空格隔开的非零整数,每个数的绝对值不超过1000,保证这些整数各不相同。
输出格式
只输出一个整数,即这 N 个数中包含多少对相反数。
样例输入
5
1 2 3 -1 -2
样例输出
2
线上没考完的试终于在今天结束了,舒服啊(考的自我感觉一般。。),可以做自己想做的事了。这题一遍过(虽然编译的时候犯了错误,还是靠错误提示过的。。),我的想法就是先将所有的数放入集合中,从第一个数开始遍历,然后在集合中寻找它的相反数,如果找到了就删除该处的元素,这样就可以防止个数被多记
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main(){
int n,num;
cin >> n;
vector<int> v;
for(int i = 0;i<n;i++){
cin >> num;
v.push_back(num);
}
int count = 0;
for(auto it = v.begin();it!=v.end();it++){
int a = *it;
vector<int>::iterator itt = find(v.begin(),v.end(),-a);
if(itt!=v.end()){
count++;
v.erase(itt);
}
}
cout << count;
return 0;
}