输入n个不相同的正整教,问其中有多少个数,恰好等于集合中另外两个(不同的)数之和? 编程要求:第一行输入n的值,第二行输入正整数集合第三行输出结果
时间: 2023-05-26 10:06:04 浏览: 122
集合的划分-递归和递推
算法思路:
1. 首先将输入的正整数集合按照从小到大的顺序排序;
2. 枚举每一个数,将它拆分成两个整数,其中一个整数是集合中任意一个数,另一个整数只需在该数左侧的部分进行查找即可,如果找到了就计数器加一;
3. 对于每一个数都要往前查找,已经查找过的不需要再次查找。
C++代码示例:
```cpp
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int n;
cin >> n; // 输入n的值
int a[n];
for(int i=0; i<n; i++)
cin >> a[i]; // 输入正整数集合
sort(a, a+n); // 排序
int cnt = 0; // 计数器
for(int i=n-1; i>=0; i--) // 从最大的数开始查找
{
for(int j=0; j<i; j++) // 在左侧的部分查找
{
int sum = a[i] - a[j]; // 计算另外一个数
if(binary_search(a, a+j, sum)) // 二分查找
{
cnt++;
break; // 已经找到了,停止搜索
}
}
}
cout << cnt << endl; // 输出结果
return 0;
}
```
阅读全文