V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
qiayue
V2EX  ›  问与答

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

  •  
  •   qiayue · 2014-08-09 15:04:04 +08:00 · 4970 次点击
    这是一个创建于 3761 天前的主题,其中的信息可能已经有所发展或是发生改变。
    其实就是会员购买了 40 元的零食盒,现在我根据他的喜好找出来了一些零食,这些零食的价格组成了一个数组,现在需要从这些零食中挑选一些出来组成一盒零食。
    第 1 条附言  ·  2014-08-09 16:12:37 +08:00
    感谢大家!


    另外再回答 @pimin 的疑问
    在得到这个数组之前我已经做了很多处理了,主要考虑的因素是:
    1、他喜欢吃的零食的其他也喜欢吃的会员们喜欢吃的零食(好绕口)
    2、他不喜欢吃的零食的其他会员们也不喜欢吃的零食
    3、他喜欢吃的零食的其他类似零食

    最终得到了一些零食,这些零食有各种价格,我对这些价格取整并去重之后,得到了题中的数组。
    15 条回复    2014-08-16 17:24:04 +08:00
    bcxx
        1
    bcxx  
       2014-08-09 15:08:14 +08:00   ❤️ 1
    背包啊……
    wong2
        2
    wong2  
       2014-08-09 15:09:22 +08:00   ❤️ 1
    啊,看到了算法在日常中的使用~
    QuakeX
        3
    QuakeX  
       2014-08-09 15:15:26 +08:00   ❤️ 1
    背包啊
    XadillaX
        4
    XadillaX  
       2014-08-09 15:44:02 +08:00   ❤️ 1
    而且是无限背包 -。 -
    canesten
        5
    canesten  
       2014-08-09 15:45:55 +08:00   ❤️ 2
    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
        6
    canesten  
       2014-08-09 15:47:44 +08:00   ❤️ 1
    没了缩进好丑
    不过脚本语言无所谓了
    楼主拿去跑就是了
    pimin
        7
    pimin  
       2014-08-09 15:52:30 +08:00 via iPhone   ❤️ 1
    楼主我是来踢场子的:
    我觉得这题解法不是很好,如果是要做礼盒,可以按销量分层组一个礼盒。
    而不是用单价来组。
    dingyaguang117
        8
    dingyaguang117  
       2014-08-09 17:14:18 +08:00   ❤️ 1
    =。= 背包9讲
    andychen20121130
        9
    andychen20121130  
       2014-08-09 17:48:00 +08:00   ❤️ 1
    你觉得40个1怎么?
    qiayue
        10
    qiayue  
    OP
       2014-08-09 17:51:21 +08:00   ❤️ 1
    @andychen20121130 如果你有这个需要的话,可以在订单备注中说明
    takato
        11
    takato  
       2014-08-09 17:53:10 +08:00   ❤️ 1
    无限背包无误。。
    no13bus
        12
    no13bus  
       2014-08-09 18:23:52 +08:00   ❤️ 1
    @wong2 同感觉
    yangxiongwei
        13
    yangxiongwei  
       2014-08-09 19:28:21 +08:00   ❤️ 1
    xming
        14
    xming  
       2014-08-16 16:06:54 +08:00
    @qiayue 网站存在bug,连续点两下注册,可生成一个用户账号。
    订单号: 1408121724345339
    什么时间可以发货,你们发货有什么规律?发哪家快递?网站怎么连个联系你们的方式都没有。。。
    qiayue
        15
    qiayue  
    OP
       2014-08-16 17:24:04 +08:00
    @xming 不好意思,网站一直在写功能代码,明天就放上联系方式去。
    每周日发货,视远近不同,大约是周一或者周二到货,发申通
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1156 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 18:53 · PVG 02:53 · LAX 10:53 · JFK 13:53
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.