查找多维数据集对-(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 祝福语驱散霉运的话简短