天天看點

CCF CSP 201403-1 相反數思路:代碼:

試題編号: 201403-1
試題名稱: 相反數
時間限制: 1.0s
記憶體限制: 256.0MB
問題描述: 有 N 個非零且各不相同的整數。請你編一個程式求出它們中有多少對相反數(a 和 -a 為一對相反數)。
輸入格式:

第一行包含一個正整數 N。(1 ≤ N ≤ 500)。

第二行為 N 個用單個空格隔開的非零整數,每個數的絕對值不超過1000,保證這些整數各不相同。

輸出格式: 隻輸出一個整數,即這 N 個數中包含多少對相反數。
樣例輸入:

5

1 2 3 -1 -2

樣例輸出: 2

思路:

1.用一個數組存儲該數字是否出現過;

2.用一個數組存儲曆史出現過該數字的和,如果和為0且該數字出現過,則說明出現過它的相反數;

代碼:

#define IOS ios_base::sync_with_stdio(0); cin.tie(0);
#include<iostream>
using namespace std;
#define N 1005
int sum[N],num[N];
int main(){
	IOS;
	int n,ans=0;
	cin>>n;
	for(int i=0;i<n;i++){
		int a;
		cin>>a;
		if(a>0) {num[a]=1;sum[a]+=a;}
		else sum[-1*a]+=a;
	}
	for(int i=1;i<N;i++)
		if(num[i]&&!sum[i]) ans++;
	cout<<ans;
	return 0;
}