时间:2021-07-01 10:21:17 帮助过:5人阅读
要求:
(1)等式左边的整数取值为 1~n-1.
(2)要求等式左边之和为n。
若 n = 3;
1 + 1 + 1 = 3;
1 + 2 = 3;
给定一个数 n
要求:
(1)等式左边的整数取值为 1~n-1.
(2)要求等式左边之和为n。
若 n = 3;
1 + 1 + 1 = 3;
1 + 2 = 3;
楼主可以去学习下 母函数
这应该是母函数的模板题
function calcN (n) {
var res = [],
cache = {};
loop(n);
function loop(k, arr) {
arr = arr || [];
var i = 1, count = k / 2 | 0;
cache[k] = true;
while (i <= count) {
res.push(arr.concat([i, k - i]));
if (!cache.hasOwnProperty(i)) {
loop(i, [k - i].concat(arr));
}
if (!cache.hasOwnProperty(k - i)) {
loop(k - i, [i].concat(arr));
}
i++;
}
}
return res;
}
// 测试部分:
console.log(calcN(5));
//
输出
[ [ 1, 4 ],
[ 1, 1, 3 ],
[ 1, 1, 1, 2 ],
[ 1, 1, 1, 1, 1 ],
[ 1, 2, 2 ],
[ 2, 3 ] ]
C++的话基于上面改就好了,用map
和vector