欧拉计划 Project Euler62(立方数重排)题解
欧拉计划 Project Euler 62题解
- 题干
- 思路
- code
题干
思路
将一个立方数的数字排序(如升序),得到一个标准形式。例如
41063625的标准形式是 ‘01234566’。然后我们维护一个字典 dict[标准形式] = [a^3 值列表],每次生成一个立方数 将其标准形式作为键,加入到对应列表中。当某个标准形式对应的立方数个数正好为 5 时,记录它们中最小的那个作为候选答案。
code
/*
5027^3 = 127035954683
7061^3 = 352045367981
7202^3 = 373559126408
8288^3 = 569310543872
8384^3 = 589323567104
127035954683
*/
#include <bits/stdc++.h>using namespace std;using ll = long long;string sorted_digits(ll n) {string s = to_string(n);sort(s.begin(), s.end());return s;
}void solve() {map<string, vector<pair<long long, int>>> cube;int i = 1;while (true) {ll cu = static_cast<long long>(i) * i * i;string key = sorted_digits(cu);cube[key].emplace_back(cu, i);if (cube[key].size() == 5) {for (auto [cu, r] : cube[key]) {cout << r << "^3 = " << cu << "\n";}// 输出最小的cout << cube[key][0].first << "\n";break;}i++;}}int main() {ios::sync_with_stdio(false);cin.tie(nullptr);int tt = 1; // cin >> tt;while (tt--) {solve();}return 0;
}