試題編號: | 201403-1 |
---|---|
試題名稱: | 相反數(shù) |
時間限制: | 1.0 s |
內(nèi)存限制: | 256.0 MB |
問題描述:
有 N 個非零且各不相同的整數(shù)。請你編一個程序求出它們中有多少對相反數(shù)(a 和 -a 為一對相反數(shù))诫肠。
輸入格式:
第一行包含一個正整數(shù) N司澎。(1 ≤ N ≤ 500)。
第二行為 N 個用單個空格隔開的非零整數(shù),每個數(shù)的絕對值不超過1000,保證這些整數(shù)各不相同栋豫。
輸出格式:
只輸出一個整數(shù),即這 N 個數(shù)中包含多少對相反數(shù)挤安。
樣例輸入:
5
1 2 3 -1 -2
樣例輸出:
2
分析
方法一:可以利用STL庫中的Set容器的特性,因為Set里的元素不能相同丧鸯,所以可以讓所有負數(shù)等于它的相反數(shù)蛤铜,所有正數(shù)等于它本身,再存入Set中丛肢,最后輸入數(shù)據(jù)的個數(shù)和Set的size的差便是答案围肥。(有興趣的同學還可以了解一下Set的insert方法的返回值)
方法二:開一個1000大小的數(shù)組,將負數(shù)等于它的相反數(shù)蜂怎,將正數(shù)等于它本身穆刻,以此為下標,讓對應數(shù)組元素的值加1杠步,最后遍歷一遍數(shù)組氢伟,給值為2的元素計數(shù)榜轿,即為結(jié)果。
代碼示例1:
# include <iostream>
# include <set>
using namespace std;
set<int> a;
int main()
{
int n = 0, x;
cin >> n;
for(int i = 0; i < n; i ++) {
cin >> x;
if(x < 0) x = 0 - x;
a.insert(x);
}
cout << n - a.size() << endl;
return 0;
}
代碼示例2:
#include <iostream>
using namespace std;
int a[1000];
int main()
{
int n, x, c = 0;
cin >> n;
for(int i = 0; i < n; i ++) {
cin >> x;
if(x < 0) x = 0 - x;
a[x - 1] ++;
}
for(int i = 0; i < 1000; i ++) {
if(a[i] == 2) c ++;
}
cout << c << endl;
return 0;
}