我需要去银行取一些钱。我需要提取30美元,22美元来支付我的室友的上网费以及8美元的洗衣费。由于这些都不能改变,我需要将$ 30分成两个大小的两个分区。这意味着当出纳员问我如何要我的30美元时,我将不得不提出请求。我可以告诉他们我要二十,五个和五个。但是我想使我的请求尽可能简单,以避免重复自己。为了使我的请求更简单,我可以要求我的现金包含20个现金,并且至少包含2个现金,因为总数暗示了8个现金,但更好的是,我可以简单地要求我收到的钞票中的一个是一美元的钞票(如果您不相信这一点,只需尝试赚29美元而不赚8)。
这样很好,但我每次去银行时都需要进行此计算,所以我想我会写一个程序来执行此操作(您是否已编写一个程序来为我执行此操作)。
您的程序或函数应使用代表我需要进行的所有付款的整数列表和代表银行可用的纸币面额的一组整数,并且您必须输出最小面额的列表,以使每种方式都能得出总计包括该种面额的清单可以清晰地分为付款清单。
额外规则
您可以假定面额列表将始终包含a
1
,也可以将其自己添加到每个列表中。一些输入将具有多个最小解决方案。在这些情况下,您可以输出其中之一。
这是代码高尔夫球,因此答案将以字节计分,而字节数越少越好。
测试用例
Payments, denominations -> requests
{22,8} {1,2,5,10,20,50} -> {1} or {2}
{2,1,2} {1,5} -> {1}
{20,10} {1,2,5,10,20,50} -> {}
{1,1,1,1} {1,2} -> {1,1,1}
{20,6} {1,4,5} -> {1}
{2,6} {1,2,7} -> {2}
{22, 11} {1, 3, 30, 50} -> {1, 3}
{44, 22} {1, 3, 30, 50} -> {1, 3, 3, 30}
22
起初我以为这是垃圾邮件或垃圾邮件之类的东西……
—
Erik the Outgolfer
@EriktheOutgolfer段落严重伤害了挑战> _ <
—
Magic Octopus Urn
我认为您应该至少包括一个测试用例,其中请求必须不是一美元的帐单,例如
—
Arnauld
{2,6} {1,2,7} -> {2}
。
@Arnauld我已经添加了您的案例
—
Wheat Wizard
(If you are not convinced of this just try to make 29 dollars without making 9)
你的意思是不进8?还是我误会了