【发布时间】:2017-04-22 00:56:29
【问题描述】:
我有一个数字 n,我必须把它分成 k 个数字,这样所有 k 个数字都是不同的,k 个数字的总和等于 n,k 是最大值。例如,如果 n 是 9,那么答案应该是 1,2,6。如果 n 是 15,那么答案应该是 1,2,3,4,5。
这是我尝试过的 -
void findNum(int l, int k, vector<int>& s)
{
if (k <= 2 * l) {
s.push_back(k);
return;
}
else if (l == 1) {
s.push_back(l);
findNum(l + 1, k - 1, s);
}
else if(l == 2) {
s.push_back(l);
findNum(l + 2, k - 2, s);
}
else{
s.push_back(l);
findNum(l + 1, k - l, s);
}
}
最初 k = n 和 l = 1。结果数字存储在 s 中。该解决方案即使将数字 n 作为 k 个不同数字的总和返回,但它不是最佳解决方案(k 不是最大的)。 n = 15 的示例输出为 1,2,4,8。应该进行哪些更改才能获得正确的结果?
【问题讨论】:
-
这里有什么问题 -
output for n = 15 is 1,2,4,8?? -
@WasiAhmad 8 可以拆分为 5 和 3,结果总数将是 5 而不是 4。
-
动态规划