拆分账单
任务 假设ppepole必须拆分钞票;每一个都由一个三元组标识,该三元组(Name, n, k)由以下各项组成: Name:名称 ; n:他/他必须支付的金额; k:她/他实际支付的金额。 这里的挑战是找出谁欠谁的钱。 假设条件 输入和输出可以采用任何方便的格式。 p ∈N,∈N,\in \mathbb{N}, \,\;\;n ∈N+,∈N+,\in \mathbb{N}^{+},\; k ∈N.∈N.\in \mathbb{N}. p >1.>1.\gt 1. 名称是任意长度的唯一字符串,由小写字母字符组成。 解 解决方案以p人们之间的最小交易量为代表。特别是三元组(from, to, amount) from:name给钱的人; to:name收钱者的; amount:交易金额。 注意:所有债务的总和(n)可能与所有已付金额的总和(k)不同。在这种情况下,您必须添加输出('owner', Name, amount)或(Name, 'owner', amount)所选的格式。任何名称都不会是owner。字符串'owner'是灵活的。 如果存在多个最小集合,则选择所有交易金额(绝对值)的总和最小的集合;如果是平局,选择其中之一。 测试用例: inputs(Name,n,k): [('a',30,40),('b',40,50),('c',30,15)] [('a',30,30),('b',20,20)] [('a',30,100),('b',30,2),('c',40,0)] [('a',344,333),('b',344,200),('c',2,2)] [('a',450,400),('b',300,300),('c',35,55)] outputs(from, to, amount): [('c','a',10),('c','b',5),('owner','b',5)] or [('c','b',10),('c','a',5),('owner','a',5)] …