python递归函数麻烦帮忙写写这个小作业明天就要上交啊!!急!!!谢谢。
本帖最后由 lwyuan源 于 2021-4-25 11:43 编辑练习:假设有面值为1元、2元、5元的货币,每种面值货币的数量分别为a、b、c (a、b、 c大于或等于0)
计算:当1*a+2*b+5*c=94时, a+b+c的最小值,最后分别输出a、b、c和a+b+c的值。 要求用递归函数完成! 帮忙写一下。明天就要上交啊。 本帖最后由 qq1151985918 于 2021-4-25 11:31 编辑
你这题确定是a,b,c>0 吗?是 abc均要求大于0还是只有c要求大于0?或者是你别是落下了等于?难道不该是abc均要求大于等于0吗?我跟你说,这可是天差地别的事。建议你把原题看仔细。
举个例子,如果要求中没有等于0,请问6元怎么分配?7元怎么分配?4元又怎么分配?2元和1元呢?
既然不回复那就算了,就当你给的题目正确吧,不过代码正确与否自己分析吧
def fun(rmb):
num = 0
if rmb == 1:
return 1
if rmb > 5 :
return num + 1 + fun(rmb - 5)
elif rmb > 2:
return num + 1 + fun(rmb - 2)
else:
return num + 1 + fun(rmb - 1)
对,abc大于或等于0 重新帮我修改下吧。谢谢。 qq1151985918 发表于 2021-4-25 11:02
你这题确定是a,b,c>0 吗?是 abc均要求大于0还是只有c要求大于0?或者是你别是落下了等于?难道不该是abc均 ...
是abc大于或等于0,帮忙修改下答案。谢谢了。 答案求完整点。新人表示一点都不会。只为交个作业。 qq1151985918 发表于 2021-4-25 11:02
你这题确定是a,b,c>0 吗?是 abc均要求大于0还是只有c要求大于0?或者是你别是落下了等于?难道不该是abc均 ...
大哥,还在吗?可以重新帮我做一下吗?麻烦了。 本帖最后由 qq1151985918 于 2021-4-25 13:04 编辑
lwyuan源 发表于 2021-4-25 11:55
大哥,还在吗?可以重新帮我做一下吗?麻烦了。
def add_list(list1: list, list2: list, long: "int >= 0" = 3) -> list:
return + list2 for i in range(long)]
def fun(rmb: "int >= 0" = 0) -> list:
if rmb in :
return
if rmb >= 5 :
return add_list(, fun(rmb - 5))
if rmb >= 2:
return add_list(, fun(rmb - 2))
qq1151985918 发表于 2021-4-25 12:47
谢谢。 qq1151985918 发表于 2021-4-25 12:47
你这个代码有点难啊,看不懂 def sumix():
mix=[]
for a in range(94):
for b in range(47):
for c in range(18):
if (a * 1 + b * 2 + c * 5) == 94:
sum=a+b+c
mix.append(sum)
for i in range(len(mix)-1):
if mix<=mix:
t=mix
mix=mix
mix=t
i+=1
return mix
print(sumix())
我这个只能算出最小值,但是不会用递归,我也是小白,刚学的! 江湖散人 发表于 2021-4-25 14:42
你这个代码有点难啊,看不懂
难则不会,会则不难。我先说一下代码原理
比如说 我们想拼凑出 10 元钱,那么用5块只需要2张,2块需要5张,1块就需要10张,所以说,要想最后用的张数最少,则应该优先使用大面额的5块钱,次用中面额的2元,最后才用1元,其实这问题如果不用递归那么谁都会做,比如说 94
我们需要用 94//5 == 18 张5,剩 94%5 == 4 要用4//2 == 2张2,剩4%2 == 0则用 0//1张 1
其实算到最后已经不用算了,因为4%2 只会是1 或者 0这就是第一个 if rmb in 的由来
然后就是要有几张5几张2的问题了,其实2不会超过2张,因为 任何数 n % 5 都不会大于 4 ,不知道我说的是不是清楚,但是要用递归来写就只能 5块5块一次拿出1张,否则一次拿出18张就不需要递归了,算2也是同样的道理
这里需要注意的是,这几个 if ,如果理不清就用 ifelif else,如果全部用 if 一定要注意先后顺序,因为满足 if rmb >= 5就一定满足if rmb >= 2 ,顺序错了那结果就错了 qq1151985918 发表于 2021-4-25 15:03
难则不会,会则不难。我先说一下代码原理
比如说 我们想拼凑出 10 元钱,那么用5块只需要2张,2块需要 ...
真的是会者不难,我都听不懂。
还得继续学习啊,小白就是小白,不懂的太多了 江湖散人 发表于 2021-4-25 16:08
真的是会者不难,我都听不懂。
还得继续学习啊,小白就是小白,不懂的太多了
没关系,多写就好了。另外我看了下你的代码,有点小问题。
for a in range(94):
for b in range(47):
for c in range(18):
我们知道,range的区间是左闭右开,比如 range(18)是取不到 18 的值的,所以应该记得 +1 qq1151985918 发表于 2021-4-25 15:03
难则不会,会则不难。我先说一下代码原理
比如说 我们想拼凑出 10 元钱,那么用5块只需要2张,2块需要 ...
大哥,为什么我运行出来,啥都没有? 本帖最后由 qq1151985918 于 2021-4-25 19:25 编辑
lwyuan源 发表于 2021-4-25 18:39
大哥,为什么我运行出来,啥都没有?
自己给运行函数自己赋值啊,这还要教?看来你学习可能1节课都没听,但凡听过一两节课也知道怎么做啊。我看你抓紧时间补习补习吧,要不老师提问你答不出来不全露馅了?
作业你直接交代码,不会给你算错误的。
代码最后加上
print("a, b, c 分别为", *fun(94))
print("a + b + c =", sum(fun(94))) qq1151985918 发表于 2021-4-25 16:25
没关系,多写就好了。另外我看了下你的代码,有点小问题。
哦,你不说我还真忘记了,谢谢啊 qq1151985918 发表于 2021-4-25 19:13
自己给运行函数自己赋值啊,这还要教?看来你学习可能1节课都没听,但凡听过一两节课也知道怎么做啊。 ...
为什么还是显示不出来。{:10_266:} lwyuan源 发表于 2021-4-26 14:48
为什么还是显示不出来。
兄弟,别嫌我说话直,赶紧转专业吧。给了答案都不会抄你还学什么?一节课都没听过说明你起码对这个专业没兴趣,要趁早!
页:
[1]
2