c++输入若干不同的整数构成的升序序列,请编写一个程序,找出序列中有多少个数是序列中其他两个数的平均值要求使用算法,使计算量最小,计算时间最短
时间: 2023-11-28 17:51:41 浏览: 160
求两个序列的中位数 减治法——C++代码
5星 · 资源好评率100%
算法思路:
1. 先将输入的升序序列存储到vector<int>中
2. 枚举每个数,以该数为平均数,查找序列中是否存在两个数的平均值等于该数
3. 可以采用双指针法,从序列的两端开始查找,如果两个指针所指的数的平均值大于目标数,则右指针左移;如果平均值小于目标数,则左指针右移;如果平均值等于目标数,则找到一个符合条件的数
4. 计数器加1,继续枚举下一个数
代码实现如下:
```c++
#include<iostream>
#include<vector>
using namespace std;
int main()
{
int n;
cin >> n;
vector<int> nums(n);
for (int i = 0; i < n; i++)
{
cin >> nums[i];
}
int count = 0;
for (int i = 0; i < n; i++)
{
int l = 0, r = n - 1;
while (l < r)
{
double avg = (double)(nums[l] + nums[r]) / 2;
if (avg > nums[i])
{
r--;
}
else if (avg < nums[i])
{
l++;
}
else
{
count++;
break;
}
}
}
cout << count << endl;
return 0;
}
```
阅读全文