版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_42449444/article/details/84949680
试题编号: | 201403-1 |
---|---|
试题名称: | 相反数 |
时间限制: | 1.0s |
内存限制: | 256.0MB |
问题描述: | 问题描述 有 N 个非零且各不相同的整数。请你编一个程序求出它们中有多少对相反数(a 和 -a 为一对相反数)。 输入格式 第一行包含一个正整数 N。(1 ≤ N ≤ 500)。 第二行为 N 个用单个空格隔开的非零整数,每个数的绝对值不超过1000,保证这些整数各不相同。 输出格式 只输出一个整数,即这 N 个数中包含多少对相反数。 样例输入 5 1 2 3 -1 -2 样例输出 2 |
解题思路:
这第一题真的都很相似啊,无脑for循环来暴力破解吧,如果在数组中存在相反数则count++,需要注意的是,count记录的是相反数的个数,并不是相反数的对数,最后输出的时候需要输出的是count/2。
100分代码:
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin >> n;
int a[n];
for (int i = 0; i < n; i++)
{
cin >> a[i];
}
int count = 0; //用来记录数组中有多少个数有相反数
//暴力破解吧 无脑for循环
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
if(a[i]==-a[j]) //判断是不是相反数
{
count++;
}
}
}
cout << count/2 << endl; //count除以2才是数组中相反数的对数
return 0;
}
———————————————2019.09.07更新—————————————————
原谅我当年写的代码这么丑陋,今天用set来重新写了一遍。
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n,cnt = 0;
cin >> n;
set<int> s;
while(n--)
{
int _;
cin >> _;
s.insert(_);
if(s.count(-_) == 1)
{
cnt++;
}
}
cout << cnt << endl;
return 0;
}