求一个算法,从一个数组(如 [13,11,10,9,6,5,4,3,2,1] )中,找出多个数,使这些数的和是一个定值(如 40),数可以重复使用

2014 年 8 月 9 日
 qiayue
其实就是会员购买了 40 元的零食盒,现在我根据他的喜好找出来了一些零食,这些零食的价格组成了一个数组,现在需要从这些零食中挑选一些出来组成一盒零食。
5472 次点击
所在节点    问与答
15 条回复
bcxx
2014 年 8 月 9 日
背包啊……
wong2
2014 年 8 月 9 日
啊,看到了算法在日常中的使用~
QuakeX
2014 年 8 月 9 日
背包啊
XadillaX
2014 年 8 月 9 日
而且是无限背包 -。 -
canesten
2014 年 8 月 9 日
lua实现:

local price = {13,11,10,9,6,5,4,3,2,1}

local balance = 40

function randomFood()
math.randomseed(os.time())
math.random(100)
math.random(100)
math.random(100)
math.random(100)
local result = {}
local num = #price
while balance > 0 do
local rangeLeft = 0
for i = 1, num do
if price[i] <= balance then
rangeLeft = i
break
end
end
if rangeLeft == 0 then
break
end
local randomIndex = math.random(rangeLeft, num)
local randomPrice = price[randomIndex]
balance = balance - randomPrice
table.insert(result, randomPrice)
print(randomPrice)
end
print(balance)
end

randomFood()

楼主拿去玩
canesten
2014 年 8 月 9 日
没了缩进好丑
不过脚本语言无所谓了
楼主拿去跑就是了
pimin
2014 年 8 月 9 日
楼主我是来踢场子的:
我觉得这题解法不是很好,如果是要做礼盒,可以按销量分层组一个礼盒。
而不是用单价来组。
dingyaguang117
2014 年 8 月 9 日
=。= 背包9讲
andychen20121130
2014 年 8 月 9 日
你觉得40个1怎么?
qiayue
2014 年 8 月 9 日
@andychen20121130 如果你有这个需要的话,可以在订单备注中说明
takato
2014 年 8 月 9 日
无限背包无误。。
no13bus
2014 年 8 月 9 日
@wong2 同感觉
yangxiongwei
2014 年 8 月 9 日
xming
2014 年 8 月 16 日
@qiayue 网站存在bug,连续点两下注册,可生成一个用户账号。
订单号: 1408121724345339
什么时间可以发货,你们发货有什么规律?发哪家快递?网站怎么连个联系你们的方式都没有。。。
qiayue
2014 年 8 月 16 日
@xming 不好意思,网站一直在写功能代码,明天就放上联系方式去。
每周日发货,视远近不同,大约是周一或者周二到货,发申通

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://study.congcong.us/t/126929

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX