You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

实现按指定规则分配退款金额的客户折扣计算函数

退款金额分配函数实现

问题描述

给定表示总超额可退款金额的字符串S,以及由K个字符串组成的数组B(每个元素对应客户的未折扣账单金额),返回与B顺序一致的字符串数组R,其中每个元素为对应客户的折扣金额。

示例说明

示例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:
    a. 计算1.00*1.00/1.05≈0.95238...
    b. 向下舍入到最接近的0.01,得到"0.95",将零碎便士转至账单金额更小的客户
    c. 设置R[1]="0.95"(对应B中1.00的位置,为结果数组的第2个元素)
  2. 剩余可退款金额为0.05
  3. 处理金额较小的B[0]=0.05:
    a. 计算0.05*0.05/0.05=0.05
    b. 无需舍入
    c. 设置R[0]="0.05",最终R=["0.05", "0.95"]

函数定义(Java)

class Solution { 
    public String[] solution(String S, String[] B); 
}

注意事项

  • 总金额S需完全退还,不得多退或少退,精确到便士
  • 禁止使用浮点数进行精确货币计算,避免精度丢失
  • 计算出的折扣金额需向下舍入至最接近的0.01,零碎便士转至账单金额更小的客户
  • 结果需以保留两位小数的字符串形式表示,例如"100.00"
  • 输入均合法,可退款总金额不会超过未折扣账单总额
  • 返回的折扣金额顺序必须与输入账单顺序一致

附:提供的示例代码(注:该代码与当前退款问题不匹配,疑似粘贴错误)

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]
print(solution(A))

内容的提问来源于stack exchange,提问作者Muhammad Ali Sufiyan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 22:57:27