求助一个算法题

fanstysword 2018-01-08 06:07:44
题目:分别有水果若干以及对应的价格,要求:给你一笔钱,你需要将这笔钱花光得到所有可能的水果组合,并且一个水果可以多个。
'apple': 59,
'banana':32,
'coconut':155,
'grapefruit':128,
'jackfruit':1100,
'kiwi':41,
'lemon':70,
'mango':97,
'orange':73,
'papaya':254,
'pear':37,
'pineapple':399,
'watermelon':500
比如1000块可以买到apple 10个和kiwi10个, 或者2个watermelon。
列出所有的组合。
...全文
667 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
oyljerry 2018-01-11
  • 打赏
  • 举报
回复
引用 4 楼 extend 的回复:
[quote=引用 3 楼 oyljerry 的回复:] 回溯法判断。

def get_fruit(fruits, remained_money):

    for (k, v) in g_fruit_price.items():
        if v == remained_money:
            fruits.append(k)
            print("get one fruit package={}".format(fruits))
        if v < remained_money:
            new_fruits = [x for x in fruits]
            new_fruits.append(k)
            get_fruit(new_fruits, remained_money - v)
    return

fruit_result = list()
get_fruit(fruit_result, 1000)
测了下,100块钱时,结果是: get one fruit package=['apple', 'kiwi'] get one fruit package=['kiwi', 'apple'] 貌似不和题主要求,两个Kiwi;一个apple一个banana,这些情况都没有。[/quote] 你看错题目了吧。两个Kiwi;一个apple一个banana 这两种加起来不能凑满100啊
extend 2018-01-11
  • 打赏
  • 举报
回复
引用 3 楼 oyljerry 的回复:
回溯法判断。

def get_fruit(fruits, remained_money):

    for (k, v) in g_fruit_price.items():
        if v == remained_money:
            fruits.append(k)
            print("get one fruit package={}".format(fruits))
        if v < remained_money:
            new_fruits = [x for x in fruits]
            new_fruits.append(k)
            get_fruit(new_fruits, remained_money - v)
    return

fruit_result = list()
get_fruit(fruit_result, 1000)
测了下,100块钱时,结果是: get one fruit package=['apple', 'kiwi'] get one fruit package=['kiwi', 'apple'] 貌似不和题主要求,两个Kiwi;一个apple一个banana,这些情况都没有。
extend 2018-01-11
  • 打赏
  • 举报
回复
引用 5 楼 oyljerry 的回复:
[quote=引用 4 楼 extend 的回复:] [quote=引用 3 楼 oyljerry 的回复:] 回溯法判断。

def get_fruit(fruits, remained_money):

    for (k, v) in g_fruit_price.items():
        if v == remained_money:
            fruits.append(k)
            print("get one fruit package={}".format(fruits))
        if v < remained_money:
            new_fruits = [x for x in fruits]
            new_fruits.append(k)
            get_fruit(new_fruits, remained_money - v)
    return

fruit_result = list()
get_fruit(fruit_result, 1000)
测了下,100块钱时,结果是: get one fruit package=['apple', 'kiwi'] get one fruit package=['kiwi', 'apple'] 貌似不和题主要求,两个Kiwi;一个apple一个banana,这些情况都没有。[/quote] 你看错题目了吧。两个Kiwi;一个apple一个banana 这两种加起来不能凑满100啊[/quote] 嗯,是看错了,要求“花光”
oyljerry 2018-01-10
  • 打赏
  • 举报
回复
回溯法判断。

def get_fruit(fruits, remained_money):

    for (k, v) in g_fruit_price.items():
        if v == remained_money:
            fruits.append(k)
            print("get one fruit package={}".format(fruits))
        if v < remained_money:
            new_fruits = [x for x in fruits]
            new_fruits.append(k)
            get_fruit(new_fruits, remained_money - v)
    return

fruit_result = list()
get_fruit(fruit_result, 1000)
extend 2018-01-10
  • 打赏
  • 举报
回复
mark下,有空搞下
Bug_Gee 2018-01-08
  • 打赏
  • 举报
回复
可以参考完全背包问题

37,718

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧