66分菜鳥求救
查看原帖
66分菜鳥求救
1444229
SlienceMC楼主2024/12/8 09:06
#include <iostream>
#include <string>
#include <cmath>
#include <vector>
using namespace std;
static bool ps(int n);
static bool isOK(int x);
static vector<int> split(int n);
int main() {
    int n;
    cin >> n;
    for (int i = n; i > 0; i--) {
        cin >> n;
        cout << n << "=";
        vector<int> result=split(n);
        for (int ii = result.size() - 1; ii > -1; ii--) { 
            cout << result[ii] << (ii != 0 ? "+" : "");
        }
        cout << endl;
    }
    return 0;
}
static bool isOK(int x) {
    return ps(5 * x * x + 4) || ps(5 * x * x - 4);
}
static bool ps(int n) {
    return (pow((int)sqrt(n),2) == n);
}
static vector<int> split(int n) {
    if (isOK(n)) return { n };
    vector<int> result;
    for (int i = n; i > 0; i--) {
        if (isOK(i)) {
            result.push_back(i);
            for (int ii : split(n-i)) {
                result.push_back(ii);
            }
            break;
        }
    }
    return result;
}
2024/12/8 09:06
加载中...