【问题描述】 有 N 个非零且各不相同的整数。请你编一个程序求出它们中有多少对相反数(a 和 -a 为一对相反数)。 【输入形式】 第一行包含一个正整数 N。(1 ≤ N ≤ 500)。 第二行为 N 个用单个空格隔开的非零整数,每个数的绝对值不超过1000,保证这些整数各不相同。 【输出形式】 只输出一个整数,即这 N 个数中包含多少对相反数。 【样例输入】 5 1 2 3 -1 -2 【样例输出】 2 C++实现
时间: 2024-01-16 15:04:52 浏览: 25
以下是基于题意的 C++ 实现:
```c++
#include <iostream>
#include <unordered_set>
using namespace std;
int main() {
int n;
cin >> n;
unordered_set<int> s; // 用哈希表存储
for (int i = 0; i < n; i++) {
int x;
cin >> x;
s.insert(x);
}
int ans = 0;
for (auto x : s) {
if (s.count(-x)) {
ans++;
}
}
cout << ans << endl;
return 0;
}
```
将输入的 n 个数放入一个哈希表中,遍历哈希表中的每一个数,如果它的相反数也在哈希表中,那么就说明找到了一对相反数,将答案加 1。最后输出答案即可。
相关问题
使用C++ 问题描述 有 N 个非零且各不相同的整数。请你编一个程序求出它们中有多少对相反数(a 和 -a 为一对相反数)。 输入格式 第一行包含一个正整数 N。(1 ≤ N ≤ 500)。 第二行为 N 个用单个空格隔开的非零整数,每个数的绝对值不超过1000,保证这些整数各不相同。 输出格式 只输出一个整数,即这 N 个数中包含多少对相反数。 样例输入 5 1 2 3 -1 -2 样例输出 2给出代码
```cpp
#include <iostream>
#include <unordered_map>
#include <vector>
using namespace std;
int main() {
int N;
cin >> N;
unordered_map<int, int> numCount;
vector<int> nums(N);
for (int i = 0; i < N; i++) {
cin >> nums[i];
numCount[nums[i]]++;
}
int count = 0;
for (int i = 0; i < N; i++) {
int num = nums[i];
if (numCount[-num] > 0) {
count++;
}
}
cout << count << endl;
return 0;
}
```
注意:这段代码是用C++编写的,可以直接运行。它使用了unordered_map来统计每个数出现的次数,并使用vector来保存输入的整数。然后遍历每个数,如果它的相反数也在输入中出现,则相反数对的数量增加。最后输出结果。
【问题描述】输入一个正整数n,输出前n个既是回文又是素数的数,要求每行输出10个数
要解决这个问题,首先需要编写一个函数来判断一个数是不是回文数和素数。接着,我们需要编写一个函数来输出前n个满足条件的数,并且每行输出10个数。
先来实现一个函数来判断一个数是不是回文数。回文数是指,正着读和倒着读都一样的数。我们可以通过将数字转换成字符串,然后判断字符串和它的逆序字符串是不是相等来实现。
再来实现一个函数来判断一个数是不是素数。素数是指除了1和它本身之外没有其他因子的数。我们可以通过检查2到这个数-1之间有没有能够整除这个数的数来实现。
接着,我们可以编写一个函数来输出满足条件的数。我们可以用一个循环来遍历所有大于1的数,然后判断它们是不是既是回文数又是素数。当找到满足条件的数后,我们输出它,并且使用一个计数器来控制每行输出10个数。
最后,我们在主程序中输入一个正整数n,然后调用这个输出函数来输出前n个满足条件的数,每行输出10个数。这样就得到了我们想要的结果。
这样就可以实现输入一个正整数n,输出前n个既是回文又是素数的数,每行输出10个数的功能了。