题目分析
set<int>
类型的变量存储的数据是int
类型的,它能自动去重并且排序。比如输入的数据是3 2 6 3 1 7 2
,那么set<int>
最终存储的是1 2 3 6 7
。
对于输入的每一个数,先判断它的绝对值是否在set<int> numbers
中,如果在,则一定能说明这是一对相反数,因为题目中说输入的所有数据各不相同,那么两个数取绝对值之后相等了,这两个数一定是相反数;如果不在numbers
中,则将这个数的绝对值插入到numbers
中。
源代码
#include <bits/stdc++.h>
using namespace std;
int main()
{
int N, num, amount = 0;
set<int> numbers;
cin >> N;
while (N--) {
cin >> num;
if (numbers.count(abs(num)))
amount++;
else
numbers.insert(abs(num));
}
cout << amount;
}
题目
问题描述
有 N 个非零且各不相同的整数。请你编一个程序求出它们中有多少对相反数(a 和 -a 为一对相反数)。
输入格式
第一行包含一个正整数 N。(1 ≤ N ≤ 500)。
第二行为 N 个用单个空格隔开的非零整数,每个数的绝对值不超过1000,保证这些整数各不相同。
输出格式
只输出一个整数,即这 N 个数中包含多少对相反数。
样例输入
5
1 2 3 -1 -2
样例输出
2