-2

Я новичок в С++ не могу решить данную задачу.

К примеру, дано число 48, 48^2 = 2304, 4^3 + 8^3 = 576, 576 * 4 = 2304, 2304 = 2304.

Возьмем число 52, 52^2 = 2704, 5^3 + 2^3 = 133, 133 * 4 = 532, 532 !=2704

whoami
  • 9

3 Answers3

4

Впрочем, ладно, держите :)

int main()
{
    int N;
    cin >> N;
    cout << ((N==48) ? "YES":"NO");
}

Минусующие, сначала врубитесь в ответ, ладно? :)

Harry
  • 221,325
1

Любое двузначное число можно представить в виде формулы для цифр 10 * d1 + d2 ( 1 <= d1 <= 9 && 0 < d2 <= 9), и ваша задача сводится к решению уравнения

(10 * d1 + d2)^2 = 4 * (d1^3 + d2^3)

Это значит, что левая часть уравнения должна делиться на 4, и если учесть, что при d2 == 0 имеем 100 * d1^2 = 4 * d1^3 <=> 25 = d1 не удовлетворяющее уравнение, то не трудно заметить, что для этого d2^2 должен делиться на 4, то есть:

d2 == 2 || d2 == 4 || d2 == 6 || d2 == 8

Формула диктует также, что если d2 четное, то и d1 должен быть четным. И если копать дальше, то заметим, что d2 / 4 тоже должен иметь значение >= 2, а значит d2 == 8, следовательно(по формуле) d1 == 4 и Harry from Kiev прав в своем ответе. Но если не копать, то имеем:

for(int d1 = 2; d1 < 10; d1 += 2)
    for (int d2 = 2; d2 < 10; d2 += 2) {
        int n = 10 * d1 + d2;
        if (n * n == 4 * (d1 * d1 * d1 + d2 * d2 * d2))
            cout << n << ' ';
            //или сравнение 
           //((N == n) ? "YES":"NO")
    }
AR Hovsepyan
  • 15,934
0
template<typename T>
vector<short> get_digits(T number)
{
    short num_digits = floor(log10(abs(number ? number : 1)) + 1);
    vector<short> digs(num_digits);
    for (; num_digits; num_digits--, number /= 10)
        digs[num_digits - 1] = (number % 10);
    return digs;
}

int main()
{ 
    int n;
    cin >> n;

    auto digs = get_digits(n); // получить вектор из цифр числа
    short sum = pow(digs[0], 3) + pow(digs[1], 3); // сумма кубов цифр  
    bool res =  (pow(n, 2) == sum*4);
    cout << boolalpha << res << endl;
    return 0;

}
  • log10, pow — неоправданное привлечение арифметики с плавающей точкой в целочисленную задачу. Уверены ли вы в корректности своего алгоритма, если, например, вызов pow(10, 2) может запросто вернуть 99.99...? Такие реализации функции pow существуют. – wololo Mar 22 '22 at 20:06
  • никогда не задумывался об этом, спасибо – ТарасПрогер Mar 23 '22 at 05:52