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

2014-08-09 15:04:04 +08:00
 qiayue
其实就是会员购买了 40 元的零食盒,现在我根据他的喜好找出来了一些零食,这些零食的价格组成了一个数组,现在需要从这些零食中挑选一些出来组成一盒零食。
4848 次点击
所在节点    问与答
15 条回复
bcxx
2014-08-09 15:08:14 +08:00
背包啊……
wong2
2014-08-09 15:09:22 +08:00
啊,看到了算法在日常中的使用~
QuakeX
2014-08-09 15:15:26 +08:00
背包啊
XadillaX
2014-08-09 15:44:02 +08:00
而且是无限背包 -。 -
canesten
2014-08-09 15:45:55 +08:00
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-08-09 15:47:44 +08:00
没了缩进好丑
不过脚本语言无所谓了
楼主拿去跑就是了
pimin
2014-08-09 15:52:30 +08:00
楼主我是来踢场子的:
我觉得这题解法不是很好,如果是要做礼盒,可以按销量分层组一个礼盒。
而不是用单价来组。
dingyaguang117
2014-08-09 17:14:18 +08:00
=。= 背包9讲
andychen20121130
2014-08-09 17:48:00 +08:00
你觉得40个1怎么?
qiayue
2014-08-09 17:51:21 +08:00
@andychen20121130 如果你有这个需要的话,可以在订单备注中说明
takato
2014-08-09 17:53:10 +08:00
无限背包无误。。
no13bus
2014-08-09 18:23:52 +08:00
@wong2 同感觉
yangxiongwei
2014-08-09 19:28:21 +08:00
xming
2014-08-16 16:06:54 +08:00
@qiayue 网站存在bug,连续点两下注册,可生成一个用户账号。
订单号: 1408121724345339
什么时间可以发货,你们发货有什么规律?发哪家快递?网站怎么连个联系你们的方式都没有。。。
qiayue
2014-08-16 17:24:04 +08:00
@xming 不好意思,网站一直在写功能代码,明天就放上联系方式去。
每周日发货,视远近不同,大约是周一或者周二到货,发申通

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

https://www.v2ex.com/t/126929

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

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

© 2021 V2EX