题意:
给一个数 n ,然后给 N 个数(-10~10),一对相反数可以组成一组,问一共可以组成几组,0本身互为相反数。
输入:
5 -3 3 0 0 3
3 0 0 0输出:
3
3
分析:
将所有的数加10,统计每个数出现的次数,可以组成相反数的数目=num[i]*num[20-i],另外0特殊考虑即可,数目=num[0]*(num[0]-1)/2;
代码:
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n,i,j,a;
double b[21],sum=0;
scanf("%d",&n);
memset(b,0,sizeof(b));
for(i=0;i<n;i++)
{
scanf("%d",&a);
b[a+10]++;
}
for(i=0;i<10;i++)
sum+=b[i]*b[20-i];
sum+=b[10]*(b[10]-1)/2; ///判断0
printf("%.0lf\n",sum);
return 0;
}