我有一个数字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。应该进行哪些更改才能获得正确的结果?
n = 15
的输出结果是1,2,4,8
?? - Wasi Ahmad