计算 C++ 中同一数组中存在的平均值的对
我们得到一个整数数组,数组的每个元素都在 [- 1000,1000] 范围内。目标是找到数组的元素对,使得它们的平均值也存在于该数组中。如果数组是 arr[]= [1,2,3,4]。那么对将是 (1,3) 和 (2,4),因为 1,3 的平均值是 2,2,4 的平均值是 3,并且 2 和 3 都存在于数组中。计数将为 2。
让我们通过例子来理解。
输入- arr[]= { -1,2,5,-3,8,10 }
输出- 同一数组中平均存在的对数为 - 2
说明- 对使得它们的平均值出现在 arr[] 中是 - (-1,5) avg 是 2, (2,8) avg 是 5. Count=2
输入- arr[] = {1,3,2,5,10,6}
输出- 同一数组中平均存在的对数为 - 3
说明- 对使得它们的平均值出现在 arr[] 中是 - (1,3) avg 为 2,(1,5) avg 为 3,(2,10) avg 为 6。Count=3。
下面程序中使用的方法如下
我们将首先为数组的所有元素制作一个频率数组。频率数组的大小是原始数组大小的两倍,因为也可能存在负元素。
负数出现的频率将从索引 0 开始到索引 1000。正数出现的频率将从索引 1000 开始到 2000。
对于每个非零频率执行此操作 -
将 (freq[i]) * (freq[i]-1)/2 添加到计数中,因为两个相同数字的平均值就是数字本身。如果数组中有 5 个 2。那么总对数将是 (5*(5-1))/2=10。
如果上述 freq[i] 不为零,则开始遍历替代频率,因为连续数字的平均值是浮点数,并且不会出现在数组中。
如果找到非零的 freq[j] 并且 freq[ (i+j)/2 ] 也非零。然后将 freq[i]*freq[j] 添加到count( as each number can pair with every other number ).
取一个整数数组 arr[]
函数average_pair(arr, size)获取数组及其大小并返回对的计数,使得对中元素的平均值也存在于数组 arr[] 中。
取初始计数为0,初始化N=1000。
计算频率数组的长度为 size_2=2*N+1 (范围 [-1000 到 1000]
最初用 0 初始化频率数组。
填充频率数组,使得负元素的频率从 0 到 1000,然后是正元素。为此,将 N 添加到索引中。
对于每个元素 arr[i] 更新频率数组为 arr_freq[arr[i] + N]++;
现在遍历频率数组,从 i=0 到 i<size_2。
对于每个非零频率添加 (freq[i]) * (freq[i]-1)/2 以根据条件 1 进行计数。
现在 arr_freq[i] 非零,遍历每个交替频率。
将 temp_2 计算为 arr_freq[(i + j) / 2]。
现在,如果 temp_2 非零且 arr_freq[j] 非零,则满足条件 3。用产品更新计数 (arr_freq[i] * arr_freq[j]);
在所有迭代结束后,计数将具有此类对的总数。
返回计数作为结果。
示例
#include <bits/stdc++.h>输出结果using namespace std;
int average_pair(int arr[], int size_1){
int count = 0;
int N = 1000;
int size_2 = (2 * N) + 1;
int arr_freq[size_2] = { 0 };
for (int i = 0; i < size_1; i++){
int temp = arr[i];
arr_freq[temp + N]++;
}
for (int i = 0; i < size_2; i++){
if (arr_freq[i] > 0){
int check = (arr_freq[i]) * (arr_freq[i] - 1);
count += check / 2;
for (int j = i + 2; j < 2001; j += 2){
int temp_2 = arr_freq[(i + j) / 2];
if (arr_freq[j] > 0 && temp_2 > 0){
count += (arr_freq[i] * arr_freq[j]);
}
}
}
}
return count;
}
int main(){
int arr[] = { 2, 3, 1, 8, 9, 10 };
int size = sizeof(arr) / sizeof(arr[0]);
cout<<"同一数组中平均存在的对数为: "<<average_pair(arr, size);
return 0;
}
如果我们运行上面的代码,它将生成以下输出 -
同一数组中平均存在的对数为: 2
以上是 计算 C++ 中同一数组中存在的平均值的对 的全部内容, 来源链接: utcz.com/z/338849.html