思路较为容易想到,由于该题数据量较小,可以使用暴力枚举每一对可能的数的情况,再判断两个数是否是相反数同时计数即可
#include<iostream> using namespace std; int arr[505]; int n,ans=0; int main(){ cin>>n; for(int i=1;i<=n;i++){ cin>>arr[i]; } for(int i=1;i<=n-1;i++){ for(int j=i+1;j<=n;j++){ if(arr[i]+arr[j]==0){ ans++; break;//题意表面只可能每个数只可能有一个对 } } } cout<<ans<<endl; return 0; }
此外还可以使用哈希的做法
1.定义一个哈希表,将数字插入哈希表中,并更新相关的布尔值为true。
2.遍历哈希表,如果发现某数的相反数存在,计数器res++。
3.最后res要除以二
#include<iostream> #include<unordered_map> using namespace std; const int N = 501; int main() { int n; int arr[N]; cin >> n; unordered_map<int, bool> hash; for (int i = 0; i < n; i++) { cin >> arr[i]; hash[arr[i]] = true; } int res = 0; for (int i = 0; i < n; i++) { if (hash[-arr[i]]) res++; } cout << res / 2; }
CCFCSP 201403-1相反数(枚举/哈希)
最新推荐文章于 2024-08-22 17:27:46 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)