c++写程序:某学校的珠心算老师采用一种快速考察珠心算加法能力的测验方法,他随机生成一个正整数集合,集合中的数各不相同,然后要求学生回等:其中有多少个数,恰好等于集合中另外两个(不同的)数之和? 最近老师出了一些测验题,请你帮忙求出答案。 输入数据 输入共两行,第一行包含一个整数n ,表示测试题中给出的正整数个数。 第二行有 n 个正整数,每两个正整数之问用一个空格隔开,表示测试题中给出的正整数。 输出数据 输出共一行,包含一个整数,表示测验题答案。 输入样例 4 1 2 3 4 输出样例 2
时间: 2023-05-17 21:05:50 浏览: 106
这是一个比较典型的求解集合中两数之和的问题,可以使用哈希表来解决。具体方法是,先将输入的正整数存入一个哈希表中,然后遍历哈希表中的每个数,对于每个数,再遍历哈希表中的其它数,判断是否存在另外两个数的和等于当前数。如果存在,则计数器加一。
以下是示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define MAX_N 100000
int n;
int a[MAX_N];
bool hash[MAX_N];
int main() {
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%d", &a[i]);
hash[a[i]] = true;
}
int cnt = 0;
for (int i = 0; i < n; i++) {
for (int j = i + 1; j < n; j++) {
if (hash[a[i] + a[j]]) {
cnt++;
}
}
}
printf("%d\n", cnt);
return 0;
}
```
对于输入样例 4 1 2 3 4,输出样例应该是 2。
阅读全文