问题描述
试题编号: | 201403-1 |
试题名称: | 相反数 |
时间限制: | 1.0s |
内存限制: | 256.0MB |
问题描述: | 问题描述 有 N 个非零且各不相同的整数。请你编一个程序求出它们中有多少对相反数(a 和 -a 为一对相反数)。 输入格式 第一行包含一个正整数 N。(1 ≤ N ≤ 500)。 第二行为 N 个用单个空格隔开的非零整数,每个数的绝对值不超过1000,保证这些整数各不相同。 输出格式 只输出一个整数,即这 N 个数中包含多少对相反数。 样例输入 5 1 2 3 -1 -2 样例输出 2 |
总的来说,今天下午的这场测试让我对自己很失望,这道题第一次提交的时候,只拿到了30分。原因在于while循环的判断条件多了一个“=”,这一点确实是我做题过程中的疏忽,希望明天下午做题目的时候,一定要认真审题,构造完备的测试样例。
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
#define MAX 500
int arr[MAX];
bool cmp(int a,int b)
{
return a<b;
}
int main()
{
int N;
while(scanf("%d",&N)!=EOF)
{
int i;
for(i=0;i<N;i++)
{
scanf("%d",&arr[i]);
}
sort(arr,arr+N,cmp);
int cnt=0;
int left=0;
int right=N-1;
while(left<right)
{
if(abs(arr[left])>abs(arr[right]))
{
left++;
}
else if(abs(arr[left])<abs(arr[right]))
{
right--;
}
else
{
if(arr[left]==-arr[right])
{
cnt++;
left++;
right--;
}
}
}
printf("%d\n",cnt);
}
return 0;
}