1. 程式人生 > >CCF認證-20140301-相反數

CCF認證-20140301-相反數

問題描述

試題編號: 201403-1
試題名稱: 相反數
時間限制: 1.0s
記憶體限制: 256.0MB
問題描述:

問題描述

  有 N 個非零且各不相同的整數。請你編一個程式求出它們中有多少對相反數(a 和 -a 為一對相反數)。

輸入格式

  第一行包含一個正整數 N。(1 ≤ N ≤ 500)。
  第二行為 N 個用單個空格隔開的非零整數,每個數的絕對值不超過1000,保證這些整數各不相同。

輸出格式

  只輸出一個整數,即這 N 個數中包含多少對相反數。

樣例輸入

5
1 2 3 -1 -2

樣例輸出

2

演算法設計:

將給定序列進行排序,然後遍歷負數元素和0,利用二分查詢演算法在整個序列中查詢當前元素的相反數,統計能查詢到相反數的數量即可。

c++程式碼:

#include<bits/stdc++.h>
using namespace std;
int main(){
	int N;
	scanf("%d",&N);
	int a[N];
	for(int i=0;i<N;++i)
		scanf("%d",&a[i]);
	sort(a,a+N);
	int num=0;
	for(int i=0;a[i]<=0;++i)
		if(binary_search(a+i+1,a+N,-a[i]))
			++num;
	printf("%d",num);
	return 0;
}