查找多维数据集对-(C ++中的(n ^(2/3)解决方案)
给出一个数字。我们必须找到两对,它们可以将数字表示为两个立方体的总和。所以我们必须找到两对(a,b)和(c,d),这样给定的数n可以表示为n=a3+b3=c3+d3
这个想法很简单。在这里,每个数字a,b,c和d都小于n1/3。对于每个小于n1/3的数字形成的不同对(x,y),如果它们的和(x3+y3)等于给定的数字,则将它们存储在哈希表中,并将和值作为键,然后如果再次获得相同的总和,他们只需打印每对
算法
getPairs(n):
begin
cube_root := cube root of n
map as int type key and pair type value
for i in range 1 to cube_root, do
for j in range i + 1 to cube_root, do
sum = i3 + j3 if sum is not same as n, then skip next part, go to second iteration
if sum is present into map, then print pair, and (i, j),
else insert (i,j) with corresponding sum into the map
done
done
end示例
#include <iostream>
#include <cmath>
#include <map>
using namespace std;
int getPairs(int n){
int cube_root = pow(n, 1.0/3.0);
map<int, pair<int, int> > my_map;
for(int i = 1; i<cube_root; i++){
for(int j = i + 1; j<= cube_root; j++){
int sum = i*i*i + j*j*j;
if(sum != n)
continue;
if(my_map.find(sum) != my_map.end()){
cout << "(" << my_map[sum].first << ", " << my_map[sum].second << ") and (" << i << ", " << j << ")" << endl;
}else{
my_map[sum] = make_pair(i, j);
}
}
}
}
int main() {
int n = 13832;
getPairs(n);
}输出结果
(2, 24) and (18, 20)
热门推荐
10 读书祝福语女生短句简短
11 感谢同事新婚祝福语简短
12 感谢教官文案祝福语简短
13 员工聚会蛋糕祝福语简短
14 元宵发客户祝福语简短
15 给团队信心祝福语简短
16 医美的祝福语大全简短
17 异国姻缘的祝福语简短
18 兄妹拍照祝福语简短的话