【发布时间】:2022-08-14 02:38:19
【问题描述】:
示例 1: `` 给定 S=\"300.01\" 和 B-[\"300.00\", \"200.00*,*100.00\"]。
R[0]=\"150.00\" (=300.01 300.00/600.00) R[1]=\"100.00\" (=150.01* 200.00/300.00)
R[2]=\"50.01\" (=50.01*100.00/100.00)
示例 2(请注意这一点)。
给定 S=\"1.00\" 和 B=[\"0.05\",\"1.00\"]。 1. 首先我们考虑 1.00,因为它是最大的,
一个。 1.00*1.00/1.05~0.95238...
湾。将 0.95238... 舍入到 \"0.95\"。四舍五入将便士带到较小的部门。 C。设置 R[1]=0.95。请注意,这与 1.00 位于同一位置。这是结果中的第二个值! 2. 现在我们还剩 0.05
- 接下来我们看看较小的 B[0]=0.05 部门
一个。 0.05 0.05/0.05 = 0.05 b。无需四舍五入
C。设置 R[0]=0.05。 R=[\"0.05\", \"0.95\"] `
写一个函数:
类解决方案 { 公共字符串 [] 解决方案(字符串 5,字符串 [] B); }
即,给定一个字符串 S 表示总超额账单和一个数组 B 由 K 个字符串组成,表示每个客户的未贴现账单。返回值应该是一个字符串数组 R(长度 M),其顺序与 B 相同,表示对每个客户的折扣金额。
笔记:
- 应全额退还总 S。不应大于或小于 S
回来。不要失去或获得一分钱!
- 小心选择代表货币的类型。众所周知,浮点数在使用货币进行精确计算时容易出错。
测试输出
-
金额应四舍五入至最接近的 0.01 美元。按照设计,零碎的便士会被推送给未调整发票较小的组。
-
结果应该用 2 位小数精度表示为字符串,即使它们都是零。前任。 \"100.00\" 5. 你可以假设合理的输入。打折的总和永远不会超过
未调整的发票。
- 请注意退回折扣的顺序与收到发票的顺序相同。
回答:::
def solution(A): answer = 0 current_sum = 0 #Currently there is one empty subarray with sum 0 prefixSumCount = {0:1} for list_element in A: current_sum = current_sum + list_element if current_sum in prefixSumCount: answer = answer + prefixSumCount[current_sum] if current_sum not in prefixSumCount: prefixSumCount[current_sum] = 1 else: prefixSumCount[current_sum] = prefixSumCount[current_sum] + 1 if answer > 1000000000: return -1 else: return answer#示例运行
A = [2,-2,3,0,4,-7]
打印(解决方案(A))
-
这里没有问题。只是一些看起来格式很差的作业的转储。
标签: python-3.x algorithm