我想以10号为单位写出所有可能的方式,作为单位3,4,...,n-1(不是2)的总和 例如,我可以写10作为
10=10(units)
10=7 + 1*3 or
10=4 + 2*3 or
10=3 + 1*3 + 1*4 or
10=2 + 2*4 or ....
我不关心组合的数量! 我想要组合!!!我的意思是像这样输出的算法
un 3 4 5 6 7 8 9 10
-------------------
10 0 0 0 0 0 0 0 0
07 1 0 0 0 0 0 0 0
04 2 0 0 0 0 0 0 0
03 1 1 0 0 0 0 0 0
02 0 2 0 0 0 0 0 0 etc
欢迎任何回复!!!
答案 0 :(得分:0)
示例:
target = 10
0
0 + 9 -> not there yet
0 + 9 + 9 -> too much, try something less
0 + 9 + 8 -> too much, try less
...
...
...
0 + 9 + 3 -> too much, cant try any less
0 + 8 -> not there yet
0 + 8 + 8 -> too much
...
...
...
0 + 8 + 3 -> too much, cant try any less
0 + 7 -> not there yet
0 + 7 + 7 -> too much
0 + 7 + 6 -> too much
...
...
...
0 + 7 + 3 -> thats it! save!
0 + 6 -> not yet
0 + 6 + 6 -> too much...
我希望你明白这个想法...... :) 它会比尝试所有可能的组合并仅选择总和为10的那些快得多。这种方法称为回溯(https://en.wikipedia.org/wiki/Backtracking),因为你试图向某个方向前进(添加最大数量) ,但是当你失败(总和太大)时,你会追踪你的进度,然后尝试不同的东西。
然后你可以通过更聪明的方式尝试可能性来加快速度(0 + 7 + 7过多4,所以不要尝试0 + 7 + 6,但直接跳到0 + 7 + 3)。