在 C++ 中具有相同 Product 的元组
假设我们有一个包含不同元素的整数数组。任务是计算元组的总数,使它们都具有相同的产品。
如果元组是 (a,b,c,d),那么如果这个元组跟在 (a*b = c*d) 之后就是有效的。例如,
输入 1:
arr[]= {2,4,6,3}
输出:
8
说明:元组的总数是 8,这些是 (2 6 3 4),(2,6,4,3),(6,2,3,4),(6,2,4,3),( 3,4,2,6),(4,3,2,6) ,(3,4,6,2), (4,3,6,2) 其中 a*b = c*d。
解决这个问题的方法 -
解决这个问题的想法是我们将对所有乘法使用哈希映射。
这将有助于确保存储在映射中的所有对都具有相同的乘法。
在创建给定数组中每个元素的乘法映射后,我们将遍历映射将检查有多少对以 (a*b = c*d) 的形式具有相同的乘法。
由于对的总数可以计算为 n*(n-1)/2 并且在一对中有“4”个数字,其中最多可以有 4*2 个这样的排列。因此,对于每个元素,它可以有 n*(n1)/2*8 对。
输入数组元素。
整数函数 countTuples(int *arr, int n) 将数组元素及其大小作为输入。并以 (a*b = c*d) 的形式返回具有相同乘积的元组数。
创建一个哈希图,使得键是对的乘积,值是这些对的频率。
迭代映射并计算具有相同产品的此类元组的数量。
示例
#include <bits/stdc++.h>输出结果using namespace std;
int countTuple(int *arr, int n) {
map<int, int> mp;
for (int i = 0; i < n; i++)
for (int j = i + 1; j < n; j++)
mp[arr[i] * arr[j]]++;
int ans = 0;
for (auto it : mp)
ans += (it.second * (it.second - 1) / 2) * 8;
return ans;
}
int main(){
int n=4;
int arr[n]= {2,4,6,3};
int res= countTuple(arr,n);
cout<<res<<" ";
return 0;
}
8
所有具有相同乘积元组的元组都是 8 个。
以上是 在 C++ 中具有相同 Product 的元组 的全部内容, 来源链接: utcz.com/z/343874.html