我的任务是:
其中输入target_amount是单个非负整数值,输入L是正整数值列表。然后,exact_change应返回True或False:如果可以通过将L中的部分或全部值相加来创建target_amount,则应返回True。如果无法通过添加某些内容来创建target_amount,则应返回False或者 - L中的所有值。
例如,L可以代表您口袋里的硬币,target_amount可以代表商品的价格 - 在这种情况下,exact_change会告诉您是否可以准确支付商品的费用。
以下是一些exact_change的实例。请注意,您始终可以对目标值0进行更改,并且永远不能对负目标值进行更改:这些是基本情况中的两个,但不是全部!
我写的函数是:
TypeError: 'int' object is not iterable
胜利必须是:
123456789
246824682
但我的结果是:
#include <stdio.h>
int main(void) {
char num[10];
int num1,num2,num3;
printf("Enter your num: ");
fgets(num,10,stdin);
num1 = num[1] * 2;
num2 = num[2] * 4;
num3 = num[3] * 6;
printf("%d %d %d", num1,num2,num3);
return 0;
}
请帮帮我!我错过了什么?
答案 0 :(得分:0)
对于 useit 递归调用,您传递的是单个int而不是剩余的列表,请参见下文:
def exact_change( target_amount, L ):
if target_amount > sum(L):
return False
elif target_amount == 0:
return True
elif target_amount < 0:
return False
elif target_amount > 0 and not L:
return False
else:
loseit = exact_change(target_amount, L[1:])
# reduce target amount since we use current coin
useit = exact_change(target_amount - L[0], L[1:])
return loseit or useit
答案 1 :(得分:-1)
您正在尝试迭代单个整数。这是不可能的。你遍历一个列表。