设定输入N个数 a1,a2,a3...an和一个总和 sum
列出所有可能由开始输入的N个数任意组合求和为sum的可能。
如 输入1,2,5 ,设定sum=10 则列出下面情况
5*2=10
5+2*2+1*1=10
5+2+1*3=10
2*5=10
2*4+1*2=10
2*3+1*4=10
2*2+1*6=10
2*1+1*8=10
1*10=10
列出所有可能由开始输入的N个数任意组合求和为sum的可能。
如 输入1,2,5 ,设定sum=10 则列出下面情况
5*2=10
5+2*2+1*1=10
5+2+1*3=10
2*5=10
2*4+1*2=10
2*3+1*4=10
2*2+1*6=10
2*1+1*8=10
1*10=10
下面的3,4,6,8,10等是怎么回事?
这个貌似是4张扑克算24的问题,比较复杂
然后再找第二大的数的最大倍数相加 也就是2*1(乘号是指+两次,实际只能使用+号)
这时是5*2+2*1 然后取下一个大的数也就是1*1
然后5变成*1 继续取思路就是这样这个算法可以使用递归假设解答为F(sum,a1,a2,...,an)
则递归为F(sum,a1..an)=F(sum-an,a1,...an-1)+F(sum-an*2,a1,..an-1)+...代码就自己去写吧
F(sum,a1..an)=F(sum-an,a1,...an-1)+F(sum-an*2,a1,..an-1)+...
a1的乘数可以从0-sum/a1
a2的乘数可以从0-sum/a2
...
an的乘数可以从0-sum/an
整个问题的难点就在这里,因为n的不确定,我就在这不知道如何实现了
SUM和an数列当然要是给定的了比如你自己的例子 sum=10 {an}={1,2,5}
假设SUM=1000000,AN={1,2},那就是500000种可能
如果AN={1,2,3}
如果AN={1,2,3,100}
你如何去实现an后面乘的那个数循环,整个算法要处理的难点就在这
{
}