使用最少的呼叫数打印多项式

时间:2011-07-09 19:08:53

标签: algorithm polynomial-math

我一直在接受这些艰难的面试问题。这个让我很困惑。

您获得了一个函数poly,它接受​​并返回int。它实际上是一个带有非负整数系数的多项式,但你不知道系数是什么。

您必须编写一个函数,使用尽可能少的poly调用来确定系数。

我的想法是使用递归知道我可以通过poly(0)获得最后一个系数。所以我想将poly替换为(poly - poly(0))/x,但我不知道如何在代码中执行此操作,因为我只能调用poly。任何人都知道如何做到这一点?

1 个答案:

答案 0 :(得分:28)

这是一个巧妙的技巧。

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