Подтвердить что ты не робот

Печать полинома с использованием минимального количества вызовов

Я продолжаю получать эти трудные интервью. Это действительно меня озадачивает.

Вам предоставляется функция poly, которая принимает и возвращает int. Это на самом деле многочлен с неотрицательными целыми коэффициентами, но вы не знаете, что такое коэффициенты.

Вам нужно написать функцию, которая определяет коэффициенты, используя как можно меньше вызовов poly.

Моя идея - использовать рекурсию, зная, что я могу получить последний коэффициент на poly(0). Поэтому я хочу заменить poly на (poly - poly(0))/x, но я не знаю, как это сделать в коде, так как я могу вызвать только poly. У кого-нибудь есть идея, как это сделать?

4b9b3361

Ответ 1

Вот аккуратный трюк.

int N = poly(1)

Теперь мы знаем, что каждый коэффициент в многочлене не превосходит N.

int B = poly(N+1)

Теперь разверните B в базе N+1 и у вас есть коэффициенты.


Попытка объяснения: Алгебраически многочлен от

poly = p_0 + p_1 * x + p_2 * x^2 + ... + p_k * x^k

Если у вас есть номер B и развернуть его в базе N, вы получите

b = b_0 + b_1 * n + b_2 * n^2 + ...

где каждый b_i определяется однозначно и b_i < n.