题目分析:
由于题目要求输入的非零整数各不相同,并且每个整数的绝对值不超过1000,所以可以设置一个大小为1000的数组,逐个扫描待输入的整数,如果是大于零的正数,则直接按照数组的位序进行统计,即使用++操作;如果是负数,则将其值取反后再按数组位序统计。由于要求输入的数各不相同,所以按照相反数的定义,从上述统计操作中可以得到是相反数的判断标准为数组对应位序的值为2.
C语言源程序:
#include<stdio.h>
#include<string.h>
#define N 1000
int num[N+1];
int main()
{
int n,i,v;
int j=0;
//初始化数组值为0
memset(num,0,sizeof(num));
scanf("%d",&n);
//逐个扫描待输入整数
for(i=0;i<n;i++)
{
scanf("%d",&v);
if(v<0)
{
num[(-v)]++;
}
else
{
num[v]++;
}
}
for(i=0;i<=N;i++)
{
//判断是相反数的条件
if((num[i])==2)
{
j++;
}
}
printf("%d",j);
return 0;
}