1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
def
choose(data,yushu,result):
for
idx,val
in
enumerate
(data):
newdata
=
data[:]
del
newdata[idx]
for
x
in
xrange
(
1
,yushu
/
val
+
1
):
result.append({
'size'
:val,
'num'
:x})
if
yushu
-
val
*
x
=
=
0
:
finalresult.append(result)
print
result
else
:
choose(newdata,yushu
-
val
*
x,result)
result.pop()
total
=
1100
mylist
=
[
100
,
250
]
finalresult
=
[]
for
idx,val
in
enumerate
(mylist):
newdata
=
mylist[:]
del
newdata[idx]
for
x
in
xrange
(
1
,total
/
val
+
1
):
if
total
-
x
*
val
=
=
0
:
finalresult.append([{
'size'
:val,
'num'
:x}])
else
:
choose(newdata,total
-
val
*
x,[{
'size'
:val,
'num'
:x}])
print
finalresult
|
打出来的result结果显示
[{'num': 1, 'size': 100}, {'num': 4, 'size': 250}]
[{'num': 6, 'size': 100}, {'num': 2, 'size': 250}]
[{'num': 2, 'size': 250}, {'num': 6, 'size': 100}]
[{'num': 4, 'size': 250}, {'num': 1, 'size': 100}]
为什么finalresult里面保存的结果却是
[[{'num': 1, 'size': 100}], [{'num': 6, 'size': 100}], [{'num': 11, 'size': 100}], [{'num': 2, 'size': 250}], [{'num': 4, 'size': 250}]]
这个程序的任务是要取出mylist里面的数的组合等于total的所有组合
类似这样
250*4 + 100*1
100*11
250*2 + 100*6
按票数排序 显示最新答案 共有5个答案 (最后回答: 3周前 )
-
顶一下,求高手解答
-
看着像 finalresult append 的result 被自己pop掉了。第八行前面把result拷贝一下吧, res = result[:] 再 finalresult.append(res)
-
递归的时候变量都在栈里,finalresult里面存的还是result的地址。之后pop掉了就没了。