【CCF CSP-20140301】相反数
题意概述
有 N 个非零且各不相同的整数。请你编一个程序求出它们中有多少对相反数。
输入输出格式
输入第一行包含一个正整数 N。第二行为 N 个用单个空格隔开的非零整数,每个数的绝对值不超过 1000,保证这些整数各不相同。
输出一个整数,即这 N 个数中包含多少对相反数。
数据规模
1 ≤ N ≤ 500 1\le N \le500 1≤N≤500
算法设计
可以暴力枚举每一对整数对,检验它们的和是否为 0 即可。为此可以先将这 n 个整数存储在一个数组中,然后枚举两个变量:i 枚举的区间为 [ 0 , n ) \left[0,n\right) [0,n),j 枚举的区间为 [ i + 1 , n ) \left[i+1,n\right) [i+1,n),j 之所以从 i+1 开始枚举,是为了防止重复枚举同一对整数对。最后统计和为 0 的整数对的个数即可。
C++代码
#include <bits/stdc++.h>
using namespace std;
using gg = long long;
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
gg ni;
cin >> ni;
vector<gg> ai(ni);
for (gg& i : ai) {
cin >> i;
}
gg ans = 0;
for (gg i = 0; i < ni; ++i) {
for (gg j = i + 1; j < ni; ++j) {
if (ai[i] + ai[j] == 0) {
++ans;
}
}
}
cout << ans;
return 0;
}